首页 运维 网络学院 查看内容

TCP/IP协议栈的封装过程概述

2019-4-27 02:57 |来自: 互联网 1676 0

摘要: 以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例,可以看到TCP/IP中报文的封装过程如上图所示。用户数据经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层,网络层封装IP头部后,再交给数据链路层,数据链路层封装Ethernet帧头和帧尾,交给物理层,物理层以比特流的形 ...
关键词: TCP 序列号 报文 数据 封装 6683743054051934 字节 传输 窗口

以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例,可以看到TCP/IP中报文的封装过程如上图所示。用户数据经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层,网络层封装IP头部后,再交给数据链路层,数据链路层封装Ethernet帧头和帧尾,交给物理层,物理层以比特流的形式将数据发送到物理线路上。

图1 封装过程

TCP Segment

图2

一、TCP协议概述:

TCP为应用程序提供一种面向连接的、可靠的服务。

TCP的可靠性:

  • 面向连接的传输
  • 最大报文段长度
  • 传输确认机制
  • 首部和数据的检验和
  • 流量控制

TCP首部格式

图3

TCP使用IP作为网络层协议,TCP数据段被封装在一个IP数据包内。TCP数据段由TCP Head(头部)和TCP Data(数据)组成。

TCP最多有60个字节的首部,如果没有任选字段,正常的长度是20字节。TCP Head如上图标识的一些字段组成,这里列出几个常用的字段。

16位源端口号:TCP会为源应用程序分配一个源端口号。

16位目的端口号:目的应用程序的端口号。每个TCP段都包含源和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址可以唯一确定一个TCP连接。

32位序列号:用于标识从TCP发端向TCP收端发送的数据字节流。

32位确认序列号:确认序列号包含发送确认的一端所期望收到的下一个序号。确认序列号为上次成功收到的数据序列号加1。

4位首部长度:表示首部占32bit字的数目。因为TCP首部的最大长度为60字节。

16位窗口大小:表示接收端期望接收的字节,由于该字段为16位,因而窗口大小最大值为65535字节。

16位检验和:检验和覆盖了整个TCP报文段,包括TCP首部和TCP数据。该值由发端计算和存储并由接收端进行验证。

二、TCP的三次握手(建立连接)和四次挥手(断开连接)

TCP连接的建立是一个三次握手的过程。如图所示:

图4

1、请求端(通常也称为客户端)发送一个SYN段表示客户期望连接服务器端口,初始序列号为a。

2、服务器发回序列号为b的SYN段作为响应。同时设置确认序号为客户端的序列号加1(a+1)作为对客户端的SYN报文的确认。

3、客户端设置序列号为服务器端的序列号加1(b+1)作为对服务器端SYN报文段的确认。

这三个报文段完成TCP连接的建立。

TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。

如图所示:

图5

1、请求端(通常也称为客户端)想终止连接则发送一个FIN段,序列号设置为a。

2、服务器回应一个确认序号为客户端的序列号加1(a+1)的ACK确认段,作为对客户端的FIN报文的确认。

3、服务器端向客户端发送一个FIN终止段(设置序列号为b,确认号为a+1)。

4、客户端返回一个确认报文(设置序列号为b+1)作为响应。

以上四次交互完成双方向的连接的关闭。

三、TCP滑动窗口机制:

图6

TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间的数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP使用肯定确认技术,其确认号指的是下一个所期待的字节。

如图中所示以数据单方向发送为例,介绍滑动窗口如何实现流量控制。服务器端向客户端发送4个大小为1024字节的数据段,其中发送端的窗口大小为4096,客户端到以ACK4097响应,窗口大小调整为2048,表明客户端(即接收端)缓冲区只能处理2048个字节的数据段。于是发送端改变其发送速率。发送接收端能够接收的数据段大小2048的数据段。

, groupId: 6683743054051934733, itemId: 6683743054051934733, type: 1, subInfo: { isOriginal: false, source: 走向智能, time: 2019-04-25 16:16:37 }, tagInfo: { tags: [{"name":"技术"}], groupId: 6683743054051934733, itemId: 6683743054051934733, repin: 0, }, has_extern_link: 0, coverImg: http://p9.pstatp.com/list/300x196/pgc-image/b1744ae63e524d6a96bde4f36a80f5ff.webp }, commentInfo: { groupId: 6683743054051934733, itemId: 6683743054051934733, comments_count: 9, ban_comment: 0 }, mediaInfo: { uid: 51186008583, name: 走向智能, avatar: //p5a.pstatp.com/large/daf100112080a279b7c0, openUrl: /c/user/51186008583/, follow: false }, pgcInfo: [{"item_id":"6683744283712815620","url":"/item/6683744283712815620","title":"Ethernet以太网传输协议理解报文封装"},{"item_id":"6683743556739269124","url":"/item/6683743556739269124","title":"UDP协议概述/TCP VS UDP"},{"item_id":"6683743054051934733","url":"/item/6683743054051934733","title":"TCP/IP协议栈的封装过程概述"},{"item_id":"6683740936737915404","url":"/item/6683740936737915404","title":"世界互联互通的基本法则(七):OSI应用层"}], feedInfo: { url: /api/pc/feed/, category: __all__, initList: [] }, shareInfo: { shareUrl: https://m.toutiao.com/group/6683743054051934733/, abstract: 以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例,可以看到TCP/IP中报文的封装过程如上图所示。用户数据经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层。.replace(/
/ig, ), commentCount: 9, ban_comment: 0 } };
本文出处: https://www.toutiao.com/a6683743054051934733/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部