【TCP-IP详解卷一:协议】ch18 TCP连接的建立与终止

1. 连接的建立与终止

1.1 tcpdump输出

在这里插入图片描述表示标志的5个字符的含义:
在这里插入图片描述

1.2 时间序列

在这里插入图片描述

1.3 建立连接协议(3次握手)
  1. 请求端(客户)发送一个SYN段指明想要连接的服务器的端口以及初始序号(ISN)(图18-3中为1415531521),该段为报文段1
  2. 服务器发回包含服务器初始序号的SYN报文段(报文段2)作为应答。将ACK置为用户的ISN+1
  3. 用户将ACK置为服务器的ISN+1对服务器的报文段进行确认
  4. 连接建立完成
1.4 连接终止协议(4次握手)

因为TCP连接是全双工的,所以每个方向都应该单独进行关闭。
在这里插入图片描述

2. 连接建立的超时

多数伯克利系统设定的建立新连接的最长时间限制为75s,IP数据报内的服务类型字段(TOS)可以用来设置最小时延。

3. 最大报文段长度

TCP传往另一端的最大块数据的长度。建立连接时双方都要通告各自的MSS,若一方不接收来自另一方的MSS,MSS设为默认值536字节(IP数据报就为20+20+536=576字节)。
一般情况下,没有分段发生的话,MSS越大越好。
MSS让主机限制另一端发送数据报的长度,主机也可以控制自己发送数据报的长度,所以可以使以较小MTU连接到一个网络上的主机避免分段。

4. TCP的半关闭

半关闭指的是一端在结束了自己的发送后还能接收另一端的数据。
在这里插入图片描述
使用情境:客户端完成所有的数据传送后还需要接收来自服务器的数据。例如Unix中sort程序

5. TCP的状态变迁图

在这里插入图片描述
在这里插入图片描述

5.1 2MSL等待状态

也就是TIME_WAIT状态。
MSL,报文段最大生存时间,指的是任何报文段在被丢弃之前在网络内的最长时间。
当TCP执行一个主动关闭,并发回最后一个ACK时,该连接在TIME_WAIT状态停留的时间必须为2倍的MSL,这样就可以让TCP再次发送最后的ACK以防该ACK丢失。
在2MSL等待期间,定义该连接的插口都不能再被使用,任何迟到的报文段都会被丢弃。
注意
服务器一般是被动关闭,所以不会进入TIME_WAIT状态。

5.2 平静时间的概念

指的是TCP在重启动后的MSL秒内不能建立任何连接,否则,假设使用处于2MSL等待端口的主机出现了故障后重启(MSL秒内),立即建立新连接的话,故障前已发出但迟到的报文段会被错误地当作重启后新连接的报文段。

5.3 FIN_WAIT_2状态

进入该状态:已经发出了FIN,并且另一端已经对它进行了确认
离开该状态进入TIME_WAIT状态:另一端发来FIN
防止在该状态无限等待的方法:设置一个定时器,若连接空闲了10min75s,TCP就进入CLOSED状态。

6. 复位报文段

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

连接请求到达时,目的端口没有进程正在听。(类似于UDP中ICMP端口不可达)
复位报文段中序号置0,确认序号置为进入的ISN(初始序号)加上数据字节数。

6.2 异常终止一个连接

异常终止一个连接对应用程序的优点:1)丢弃任何待发数据并立即发送复位报文段;2)接收方会区分另一端执行的是异常还是正常关闭。
注意

  1. RST报文段不会导致另一端产生任何响应,另一端不进行确认
  2. 收到RST的一方直接终止连接并通知应用层连接复位。
6.3 检测半打开连接

半打开的概念:一方已经关闭或异常终止连接,而另一方还不知道。(只要不打算在这种连接上传数据,仍处于连接状态的一方就不会检测另一方已出现异常)

7. 同时打开

两个应用程序同时彼此执行主动打开。每一方都需要使用一个对方熟知的端口作为本地端口。
在这里插入图片描述
注意

  1. TCP同时打开只建立一条连接
  2. 一个同时打开的连接需要交换4个报文段
  3. 每一端既是客户又是服务器

8. 同时关闭

在这里插入图片描述
同时关闭与正常关闭使用的段交换数目相同。

9. TCP选项

在这里插入图片描述

10. TCP服务器的设计

10.1 TCP服务器端口号

对于多条从相同的主机到相同服务器的连接,本地端口号是一致的,远端端口号不同,所以不会造成冲突。

10.2 限定的本地IP地址

为程序指明一个IP地址(或主机名)并将其作为服务器,那么该IP地址就成为处于LISTEN服务器的本地IP地址,使得该服务器程序的连接仅限于来自该接口。

10.3 限定的远端IP地址

指明远端插口也就是等待一个特定的客户执行主动打开,不指明远端插口也就是等待任何客户。
在这里插入图片描述

10.4 呼入连接请求队列

服务器正忙时处理呼入的连接请求的规则:

  1. 等待连接请求端有一个固定长度的连接队列,队列中的连接已经被TCP接收(完成了3次握手)但还未被应用层接受。
  2. 应用层指明连接队列的最大长度,该值称为积压值,取值范围为0~5的整数
  3. 连接请求(SYN)到达时,TCP根据当前连接队列中的连接数确定是否接收。注意,应用层指定的积压值对系统所允许的最大连接数,或并发处理器能并发处理的客户数没有影响。
  4. 若TCP监听的端点的连接队列中还有空间,TCP模块会对SYN进行确认并完成连接的建立。
  5. 若TCP监听的端点的连接队列中没有空间,TCP就不理会收到的SYN,也不会发回任何报文段(不发回RST)

11. 小结

  1. 3次握手建立连接
  2. 4次握手关闭连接
  3. 连接建立如何超时
  4. 连接复位如何发送
  5. 半打开连接发生的情况
  6. TCP如何提供半关闭、同时打开和同时关闭
  7. TCP的状态变迁以及设计并发服务器时TCP连接建立的具体实现
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值