第18章(一)TCP连接建立和终止的正常情况

本文详细解析了TCP连接建立的三次握手过程,包括请求端发送SYN报文段、服务器回应SYN+ACK报文段,以及双方确认序号以建立连接。同时,阐述了TCP连接终止所需的四次握手过程,解释了半关闭状态的原因。

一、预备知识

先看懂tcpdump的输出

 序号  时间(间隔时间) 发送方向    报文段信息


 


信息:S 1823083521:18230835210ack 1415531522 win4096 <mss 1024>

S说明这是一个同步报文段, win 4096 表示发端通告窗口的大小。<mss 1024>指明最大报文段长度。发端将不接受超过这个长度的TCP报文段。通常是为了避免分段。

1823083521:18230835210)对应【序号】:【隐含结尾序号】(【数据字节数】)这样一个格式。

注意这里是个特例,实际中大多数形式是这样的:  37:447

37是报文段的序号,44是下条报文段开始序号,也就是本报文段最后一个字节数据序号+17就是本报文段数据长度为7字节。

1823083521:18230835210)这种形式,只有当SYNFINRST被设置为1的时候才这样显示。

这种情况报文内没有数据,但是要占用一个序列号。是为了使得对方能够确认,使用序号对SYN报文进行确认。

所以可能有人会有这样的疑惑,为什么SYNFIN报文要占一个序号,而ack报文却不要,就是这个原因。Ack不需要确认。

 

二、TCP连接建立

 

(1)请求端(客户)发送一个SYN段指明客户打算连接的服务器端口,以及初始序列ISN(本图例中的客户端ISN1415531521,连接的每一方都有各自独立的序号,这里服务器段的ISN就是报文段中1823083521)。这个SYN段为报文段1

(2)服务器发回包含服务器的的初始序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN1以对客户的SYN报文段进行确认。ack 1415531522 意思就相当于我已经接受到了1415531522之前的报文段,请继续发送从1415531522序号开始的报文段。

(3)客观必须将确认序号只为服务器的ISN+1 = 1823083522对服务器的SYN报文段进行确认。

 

这三个报文段完成连接的建立。这个过程被称为TCP的三次握手Three-way handshake

 

发送第一个SYN的一段执行主动打开(active open)。接受这个SYN并发回下一个SYN的另一端执行被动打开(Passive open

双方第一次发送SYN时候使用的序号又称ISN,系统初始化的时候ISN被初始化为1,这个变量没0.5秒增加64000,并隔9.5小时又回到0.另外,每次建立连接这个变量都将增加64000

三、TCP连接终止

 

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这是由TCP的半关闭(half-close)造成的。

收到一个FIN只意味着在这一方向上没有数据流动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值