A8站源码交易平台 TCP系列01--概述及协议头格局

  • 时间:2019-07-24 14:41 编辑:A8站 来源:A8站 阅读:272
  • 扫一扫,手机访问
摘要:在运用TCP协议进行通讯之前两端一般需求经过三次握手来树立TCP联接,联接树立后才调进行正常的数据传输,因而播送和多播不会承载在TCP协议上。(谷歌提交了一个RFC文档,主张在TCP三次握手的进程容许SYN数据包中带数据,即 TFO(TCP Fast Open),现在ubuntu14.04现已支撑该TFO功用)。可是一起面向联接的特性给TCP带来了杂乱的联接处理以及用于检测联接状况的存活检测机制。

A8站源码生意途径

目录

 
一、TCP简略介绍

面向联接

牢靠性

字节省式

二、TCP的封装和协议头的格局

三、TCP中的数据包窗口和滑窗

A8站源码生意途径


一、TCP简略介绍


        咱们常常听人说TCP是一个面向联接的(connection-oriented)、牢靠的(reliable)、字节省式(byte stream)传输协议,  TCP的这三个特性该怎样了解呢?

面向联接

在运用TCP协议进行通讯之前两端一般需求经过三次握手来树立TCP联接,联接树立后才调进行正常的数据传输,因而播送和多播不会承载在TCP协议上。(谷歌提交了一个RFC文档,主张在TCP三次握手的进程容许SYN数据包中带数据,即 TFO(TCP Fast Open),现在ubuntu14.04现已支撑该TFO功用)。可是一起面向联接的特性给TCP带来了杂乱的联接处理以及用于检测联接状况的存活检测机制。

牢靠性

由于TCP处于多跳通讯的IP层之上,而IP层并不供给牢靠的传输,因而在TCP层看来就有四种常见传输差错问题,别离是比特差错(packet bit errors)、包乱序(packet reordering)、包重复(packet duplication)、丢包(packet erasure或称为packet drops),TCP要供给牢靠的传输,就需求有额定的机制处理这几种差错。因而个人了解牢靠性体现在三个方面,首要TCP经过超时重传和快速重传两个常见方法来确保数据包的正确传输,也便是说接纳端在没有收到数据包或许收到差错的数据包的时分会触发发送端的数据包重传(处理比特差错和丢包)。

其次TCP接纳端会缓存接纳到的乱序抵达数据,重排序后在向运用层供给有序的数据(处理包乱序)。终究TCP发送端会坚持一个发送"窗口"动态的调整发送速率以适用接纳端缓存绑缚和网络拥塞状况,避免了网络拥塞或许接纳端缓存满而许多丢包的问题(下降丢包率)。因而牢靠性需求TCP协议具有超时与重传处理、窗口处理、流量操控、拥塞操控等功用。

其他TFO下TCP有或许向运用层供给重复的数据,也便是不牢靠传输,可是只会发作在联接树立阶段,咱们后续会进行介绍。

字节省式            A8站源码生意途径

运用层发送的数据会在TCP的发送端缓存起来,一起分片(例如一个运用层的数据包分红两个TCP包)或许打包(例如两个或许多个运用层的数据包打包成一个TCP数据包)发送,到接纳端的时分接纳端也是直接依照字节省将数据传递给运用层。作为比照,同样是传输层的协议,UDP并不会对运用层的数据包进行打包和分片的操作,一般一个运用层的数据包就对应一个UDP包。这个也是随同TCP窗口处理、拥塞操控等。

        在接下来的TCP系列中,咱们将会顺次介绍TCP协议的联接处理、超时与重传、流量操控、窗口处理、拥塞操控、存活检测等机制。在深化介绍这些内容之前咱们先来看一下TCP的封装和协议头的格局(TCP/IP的网络分层等根底网络概念本处不在介绍)

二、TCP的封装和协议头的格局

    TCP封装在IP报文中的时分,如下图所示,TCP头紧接着IP头(IPV6有扩展头的时分,则TCP头在扩展头后边),不带着选项(option)的TCP头长为20bytes,带着选项的TCP头最长可到60bytes。
--------------------- 

1.png其间不带着选项的TCP头如下图所示(其间暗影部分的四个字段标清楚相反方向的数据流信息),其间header length字段由4比特构成,最大为15,单位是32比特(32-bit word),即头长的最大值为15*32 bits = 60bytes,因而上面说带着选项的TCP头长最长为60bytes。
--------------------- 

2.pngTCP头中的相关字段次序阐明如下:                  A8站源码生意途径

   TCP源端口(Source Port):16位的源端口其间包含发送方运用程序对应的端口。源端口和源IP地址标明报文发送端的地址。

   TCP意图端口(Destination port):16位的意图端口域界说传输的意图。这个端口指明报文接纳核算机上的运用程序地址接口。

TCP的源端口、意图端口、以及IP层的源IP地址、意图IP地址四元组仅有的标识了一个TCP联接,一个IP地址和一个端口号的组合叫做一个endpoint或许socket。也即一对endpoint或许一对socket仅有的标识了一个TCP联接。接纳端的TCP层便是根据不同的端口号来将数据包传送给运用层的不同程序,这个进程叫做解复用(demultiplex)。相应的发送端会把运用层不同程序的数据映射到不同的端口号,这个进程叫做复用(multiplex)。

   TCP序列号(序列码SN,Sequence Number):32位的序列号标识了TCP报文中第一个byte在对应方向的传输中对应的字节序号。当SYN呈现,序列码实践上是初始序列码(ISN),而第一个数据字节是ISN+1,单位是byte。比如发送端发送的一个TCP包净荷(不包含TCP头)为12byte,SN为5,则发送端接着发送的下一个数据包的时分,SN应该设置为5+12=17。经过系列号,TCP接纳端能够识别出重复接纳到的TCP包,然后丢掉重复包,一起关于乱序数据包也能够依托系列号进行重排序,进而对高层供给有序的数据流。其他SYN标志和FIN标志在逻辑上也占用一个byte,当SYN标志位有用的时分,该字段也称为ISN(initial sequence number),具体请参看后续的TCP联接处理。                  A8站源码生意途径

   TCP应对号(Acknowledgment   Number简称ACK Number或简称为ACK Field):32位的ACK Number标识了报文发送端希望接纳的字节序列。假定设置了ACK操控位,这个值标明一个预备接纳的包的序列码,留神是预备接纳的包,比如当时接纳端接纳到一个净荷为12byte的数据包,SN为5,则发送端或许会回复一个招认收到的数据包,假定这个数据包之前的数据也都现已收到了,这个数据包中的ACK Number则设置为12+5=17,标明17byte之前的数据都现已收到了。在举一个比如,假定在这个数据包之前有个SN为3,净荷为2byte的数据包丢掉,则在承受端接纳到这个SN为5的乱序数据包的时分,协议要求接纳端有必要要回复一个ACK招认包,这个招认包中的Ack Number只能设置为3。     A8站源码生意途径

   头长(Header Length):4位包含TCP头巨细,指示TCP头的长度,即数据从何处初步。最大为15,单位是32比特(32-bit word)。

   保存(Reserved):4位值域,这些位有必要是0。为了将来界说新的用场所保存,其间RFC3540将Reserved字段中的终究一位界说为Nonce标志。后续拥塞操控部分的阐明咱们会简略介绍Nonce标志位。

   标志(Code Bits):8位标志位,下面介绍。

   窗口巨细(Window Size):16位,该值指示了从Ack Number初步还愿意接纳多少byte的数据量,也即用来标明当时接纳端的接纳窗还有多少剩下空间。用于TCP的流量操控。

   校验位(Checksum):16位TCP头。发送端根据数据内容核算一个数值,接纳端要与发送端数值作用完全相同,才调证明数据的有用性。接纳端checksum校验失利的时分会直接丢掉这个数据包。CheckSum是根据伪头+TCP头+TCP数据三部分进行核算的。其他关于大的数据包,checksum并不能牢靠的反响比特差错,运用层应该再增加自己的校验方法。

   优先指针(急切,Urgent  Pointer):16位,指向后边是优先数据的字节,在URG标志设置了时才有用。假定URG标志没有被设置,急切域作为填充。加速处理标明为急切的数据段。

   选项(Option):长度不定,但长度有必要所以32bits的整数倍。常见的选项包含MSS、SACK、Timestamp等等,后续的内容会别离介绍相关选项。
A8站源码生意途径
 

在标志(Code Bits)中的八位标志位别离介绍如下

CWR(Congestion Window Reduce):拥塞窗口削减标志被发送主机设置,用来标明它接纳到了设置ECE标志的TCP包,发送端经过下降发送窗口的巨细来下降发送速率

ECE(ECN Echo):ECN照顾标志被用来在TCP3次握手时标明一个TCP端是具有ECN功用的,而且标明接纳到的TCP包的IP头部的ECN被设置为11。更多信息请参看RFC793。

URG(Urgent):该标志方位位标明急切(The urgent pointer) 标志有用。该标志位现在现已很少运用参看后边流量操控和窗口处理部分的介绍。

ACK(Acknowledgment):取值1代表Acknowledgment Number字段有用,这是一个招认的TCP包,取值0则不是招认包。后续文章介绍中当ACK标志位有用的时分咱们称谓这个包为ACK包,运用大写的ACK称谓。

PSH(Push):该标志置位时,一般是标明发送端缓存中现已没有待发送的数据,接纳端不将该数据进行部队处理,而是尽或许快将数据转由运用处理。在处理 telnet 或 rlogin 等交互方法的联接时,该标志总是置位的。

RST(Reset):用于复位相应的TCP联接。一般在发作失常或许差错的时分会触发复位TCP联接。

SYN(Synchronize):同步序列编号(Synchronize Sequence Numbers)有用。该标志仅在三次握手树立TCP联接时有用。它提示TCP联接的服务端检查序列编号,该序列编号为TCP联接初始端(一般是客户端)的初始序列编号。在这里,能够把TCP序列编号看作是一个规划从0到4,294,967,295的32位计数器。经过TCP联接交流的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包含了TCP分段中第一个字节的序列编号。相似的后续文章介绍中当这个SYN标志位有用的时分咱们称谓这个包为SYN包。

FIN(Finish):带有该标志置位的数据包用来结束一个TCP会话,但对应端口仍处于翻开状况,预备接纳后续数据。当FIN标志有用的时分咱们称谓这个包为FIN包。A8站源码生意途径

    其他咱们一般称谓链路层的发出去的数据包为帧(frame),称谓网络层发给链路层的数据包为包(packet),称谓传输层发给网络层的数据包为段(segment)。可是正如咱们描绘所用,段、包、帧也常常统称为数据包或许数据报文。

    对运用层来说TCP是一个双向对称的全双工(full-duplex)协议,也便是说运用层能够一起发送数据和接纳数据。这就意味着数据流在一个方向上的传输是独立于另一个方向的传输的,每个方向上都有独立的SN。

三、TCP中的数据包窗口和滑窗

    在TCP的发送端和接纳端都会坚持一个窗口,由于一个TCP联接是双向的,因而实践上一个TCP联接总共有四个窗口。此处咱们先简略介绍一个发送端的窗口如下。图中的数字标明byte也便是和上面介绍的TCP协议头中的SN是对应的,3号byte以及3号之前的数据标明现已发送而且收到了接纳端的ACK招认包的数据;4、5、6三个byte标明当时能够发送的数据包,也有或许现已现已发送了可是还没有收到ACK招认包;7号byte及之后的数据标明为了操控发送速率暂时不能发送的数据。其间4-6这三个byte就称谓为窗口巨细(window size)。当TCP联接树立的时分,两端会经过TCP头中的窗口巨细字段向对方布告自己接纳端的窗口巨细,发送端根据接纳端布告的窗口巨细来设置发送端的发送窗口巨细,其他在拥塞操控的时分也是经过调整发送端的发送窗口来调整发送速率的。窗口这个词的来历便是当咱们从这一个数据序列中独自看4、5、6这几个byte的时分,咱们似乎是从一个"窗口"中查询的相同。此处先简略有个滑窗的概念后续咱们讲到TCP的窗口处理的时分会持续进一步介绍TCP的滑窗。
--------------------- 

3.png

A8站源码生意途径

相关补偿:

1、TCPIP开端传输层和IP层是同一个层的,关于网络分层的小故事能够参看http://news.cnblogs.com/n/187131/ , IETF上还专门有一个愚人节系列的RFC,参看https://en.wikipedia.org/wiki/April_Fools%27_Day_Request_for_Comments

2、TCP头中CheckSum的核算能够参看资料

http://www.roman10.net/2011/11/27/how-to-calculate-iptcpudp-checksumpart-1-theory/这个联接里边总共三个系列别离是理论、结束、用例和验证。

http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm 

或许参看TCPIP详解卷一第二版(暂时只需英文版,姓名TCP/IP Illustrated Volume 1 Second Edition The Protocols) P475页

3、后边触及的相关RFC文档能够去IETF官网 http://www.ietf.org/查询 直接查找RFC号码就行了。整个TCP相关的协议系统,IETF拾掇后在2015年以RFC7414发布,想了解或许查询TCP相关RFC协议的能够先看看RFC7414协议,以对整个TCP协议有个归纳了解

4、现在linux4.4结束上还不支撑Nonce标志,能够参看内核代码中struct tcphdr结构对TCP头的界说。关于Llinux不同版别内核TCP结束相关的更新能够检查linux的changelog,网址https://kernelnewbies.org/LinuxVersions  其间有每个版其他changelog 还有对应的批改代码

5、TCP传输中的包重复,不见得是TCP重传导致的,也或许是由于IP层供给的不牢靠传输导致的 http://stackoverflow.com/questions/12871760/packet-loss-and-packet-duplication

6、在网络传输进程中NAT或许会批改checksum乃至系列号seq,后边咱们议论窗口处理等内容的时分为了简化不考虑nat批改seq的场景,即以为发送端发包的seq与接纳端接纳这个包的时分seq相同
--------------------- 

A8站源码生意途径


  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部