您的位置:首页 > 理论基础 > 计算机网络

TCP/IP协议详解-TCP简介与TCP建立与终止

2015-08-25 23:01 561 查看
1 TCP简介

TCP是面向连接,可靠的字节流服务.Tcp对字节流的内容不作任何解释,它不知道二进制数据传输的是二进制数据,ASCII字符或其他类型数据。

TCP提供全双工服务,数据能在两个方向上独立的进行传输



TCP首部数据格式:



URG 紧急指针

ACK 确认序号有效

PSH 接收方应该尽快将这个报文段交给应用层

RST 重新连接

SYN 同步序列号用来发起一个连接

FIN 发送端完成发送任务

不同于IP检验和只包含首部,TCP检验和与UDP检验和相似,包含首部和数据

最常见的可选字段为最长报文大小(MSS)

2 TCP连接与终止

TCP连接与终止的tcpdump输出:





TCP连接与终止的时间序列:



建立连接协议(三次握手):

1)客户端发送一个SYN段指明客户打算连接的服务器端口,以及初始序号

2)服务器发挥包含服务器的初始序号的SYN报文段作为应答,同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号

3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认

连接终止协议(四次握手):



TCP是全双工,因此每个方向必须单独关闭。当TCP接连收到一个FIN只意味着这一方向上没有数据流动,进行半关闭状态,但依然可以发送数据。

3 连接建立超时

telnet服务器,然后断开服务器电缆时tcpdump输出:



可以看到SYN报文段进行了重传,当在设定的时间限制内依然无法成功建立连接,放弃连接

tos 0x10是IP数据报内的服务类型,tlenet将这个字段设置为最小时延

重传的时间存在一定规律。因为TCP软件采用500ms的定时器,并采用指数退避算法来确定每次重传时间



4 最大报文长度



tcpdump输出结果:



一个连接建立时,双方要通告各自的MSS,然后进行协商。如果一方不接受另一方通告的mss,就采用默认的mss(536字节)

sun收到的MSS选项值为256,发送的报文段不会超过256字节的数据。slip收到的MSS选项值为1460,但它的外出接口的MTU长度为296,为了避免分段,它不会发送超过256字节数据的报文段

5 TCP的半关闭



TCP是全双工,因此每个方向必须单独关闭。当TCP接连收到一个FIN只意味着这一方向上没有数据流动,进入半关闭状态,但依然可以发送数据。

6 TCP状态迁移



TIME_WAIT状态称为2MSL等待状态。MSL为一个报文段最大生存时间,该时间是有限的。因为TCP报文段以IP数据包在网络传输,IP数据包有限制其生存时间的TTL字段

当TCP执行一个注定关闭,并发回最后一个ACK,该来连接必须在TIME_WAIT状态停留的时间为2倍MSL,这样可以让TCP再次发送最后的ACK以防这个ACK丢失

同时需要注意的,一般情况,在TIME_WAIT状态下,对应的socket(客户IP地址和端口,服务器IP地址和端口)不能再被使用

处于TIME_WAIT的主机出现故障,会在MSL秒内重启,并使用原来的socket进行连接。这样的话,故障前发出的报文段会被错误的当作属于重启后新连接的报文段。因此规定TCP在重启后的MSL秒内不能建立任何连接

7 复位报文段

无论何时一个报文段发往连接出现错误,TCP都会发出一个复位报文段

到不存在的端口的连接请求:



tcpdump输出:



异常终止一个连接:

异常终止连接好处:

1)丢弃任何待发数据并立即发送复位报文段

2)RST的接收方会区分另一端执行的是异常关闭还是正常关闭

客户端:



tcpdump输出:



RST报文段不会导致另一端产生任何响应,另一端终止连接,通知应用层复位,不需要对RST报文发送ACK报文

服务端:



检测半打开连接:

服务器断开网络,重启,然重新连网来模拟半打开连接



tcpdump输出:



8 同时打开

A中的客户程序与B中的服务器程序建立连接,B中的客户程序与A中的服务器程序建立连接。客户程序选择的本地端口不是另一端服务器进程所熟悉的。这样设计就为了处理同时打开情况



例子:

主机A:



主机B:



tcpdump输出:



9 同时关闭

10 TCP选项



kind字段说明选项类型

len字段说明总长度

设置无操作选项的原因在于允许发送方填充字段为4字节的倍数

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp