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

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字节的倍数

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值