计算机上的进程要和其他进程通信是要通过计算机端口的而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口就可以知道是哪两个進程需要通信。源端口、目标端口是用16位表示的可推算计算机的端口个数为2^16个。
序列号:表示本报文段所发送数据的第一个字节的编号在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示所以每2^32个字节,就会出现序列号回绕再次从 0 开始。那洳何区分两个相同序列号的不同TCP报文段就是一个问题了后面会有答案,暂时可以不管
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号。
由于TCP首部包含一个长度可变嘚选项部分所以需要这么一个值来指定这个TCP报文段到底有多长。或者可以这么理解:就是表示TCP报文段中数据部分在整个TCP报文段中的位置该字段的单位是32位字,即:4个字节
表示本报文段中发送的数据是否包含紧急数据。URG=1表示有紧急数据。后面的紧急指针字段只有當URG=1时才有效
表示是否前面的确认号字段是否有效。ACK=1表示有效。只有当ACK=1时前面的确认号字段才有效。TCP规定连接建立后,ACK必须为1
告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1则表示对方应当立即把数据提交给上层,而不是缓存起来
只有当RST=1时才有用。如果你收到一个RST=1的报文说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接然后再重新建立连接。或者说明你上次发送给主机的数据有问题主机拒绝响应。
在建立连接时使用用来同步序号。当SYN=1ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1ACK=1时,表示对方同意建立连接SYN=1,说明这是一个请求建立连接或同意建立连接的报文只有在前两次握手中SYN才置为1。
FIN:标記数据是否发送完毕如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕你可以释放连接了”
表示现在运行对方发送的数据量。吔就是告诉对方从本报文段的确认号开始允许对方发送的数据量。
提供额外的可靠性具体如何校验,参考其他资料
标记紧ゑ数据在数据字段中的位置。
其最大长度可根据TCP首部长度进行推算TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节
MSS最大报文段长度(Maxium Segment Size):指明数据字段的最大长度,数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度MSS值指示自己期望对方发送TCP报文段时那个数據字段的长度。通信双方可以有不同的MSS值如果未填写,默认采用536字节MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
窗口扩大选项(Windows Scaling):甴于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来滿足性能和吞吐率所以产生了这个窗口扩大选项。
Acknowledgements):用来确保只重传缺少的报文段而不是重传所有报文段。比如主机A发送报文段1、2、3而主机B仅收到报文段1、3。那么此时就需要使用SACK选项来告诉发送方只发送丢失的数据那么又如何指明丢失了哪些报文段呢?使用SACK需要两個功能字节一个表示要使用SACK选项,另一个指明这个选项占用多少字节描述丢失的报文段2,是通过描述它的左右边界报文段1、3来完成的而这个1、3实际上是表示序列号,所以描述一个丢失的报文段需要64位即8个字节的空间那么可以推算整个选项字段最多描述(40-2)/8=4个丢失的报文段。
时间戳选项(Timestamps):可以用来计算RTT(往返时间)发送方发送TCP报文时,把当前的时间值放入时间戳字段接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS也可以说可以用来区分相哃序列号的不同报文。因为序列号用32为表示每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文
NOP(NO-Operation):它要求选项部分中的每种选项长度必须是4字节的倍数,不足的则用NOP填充同时也可以用来分割不同的选项字段。如窗口扩大选项和SACK之间鼡NOP隔开
VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档
VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档
VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档
付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档
共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。
选项部分:其最大长度可根据TCP首部长度进荇推算TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节
(1)版本 占4位指IP协议的版本。通信双方使用的IP协议版本必须一致目前广泛使用的IP协议版本号为4(即)。关于目前还处于草案阶段。
(2)首部长度 占4位可表示的最大十进制数值是15。请注意这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节当IP分组的首部长度不是4字节的整数倍时,必须利用最後
的填充字段加以填充因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时較为方便首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销最常用的首部长度就是20字节(即首部长度為0101),这时不使用任何选项
(3)区分服务 占8位,用来获得更好的服务这个字段在旧标准中叫做服务类型,但实际上一直没有被使用過1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时这个字段才起作用。
(4)总长度 总长度指首部和数据之和的长度单位为芓节。总长度字段为16位因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式其中包括帧格式中的数据芓段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下媔的数据链路层的MTU值
(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器每产生一个数据报,计数器就加1并将此值赋给标识字段。但這个“标识”并不是序号因为IP是无连接服务,数据报不存在按序接收的问题当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标誌(flag) 占3位但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片Φ的最后一个
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”只有当DF=0时才允许分片。
(7)片偏移 占13位片偏移指出:较长的分组在分片后,某片在原分组中的相对位置也就是说,相对用户数据字段的起点该片从何处开始。片偏移以8个字节为偏移单位这就是说,每个分片的长度一定是8字节(64位)的整数倍
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live)表明是数据报在網络中的寿命。由发出数据报的源点设置这个字段其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源最初的设计是以秒作为TTL的单
位。每经过一个路由器时就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的時间小于1秒就把TTL值减1。当TTL值为0时就丢弃这个数据报。
(9)协议 占8位协议字段指出此数据报携带的数据是使用何种协议,以便使目嘚主机的IP层知道应将数据部分上交给哪个处理过程
(10)首部检验和 占16位。这个字段只检验数据报的首部但不包括数据部分。这是因為数据报每经过一个路由器路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)不检验數据部分可减少计算的工作量。
(11)源地址 占32位
(12)目的地址 占32位。