TCP三次握手和四次断开

发布时间:2020-07-13 10:26:12 作者:酥心糖
来源:网络 阅读:864

TCP,一个大家都熟悉的协议,对于技术人员来说,透彻的理解他,就到代表咱们的半只脚已经踏进了IT的大门。


TCP的特点

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着是一对一的连接(通常是一个客户端连接一个服务端),在交换数据之前,需要先建立连接。在TCP的连接中,仅有一对一的双方建立连接,多播和广播不属于TCP的连接。


TCP保证其可靠性的机制




TCP一些属性说明


当我们在Linux系统中使用tcpdump时可以看到一些数据的传输信息,这包含了TCP数据包的一些报头信息:

# tcpdump -i eth0 '(( host 192.168.1.210) and ( port 80))'
13:30:19.078214 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [S], seq 1725365454, win 8192, options [mss1460,nop,wscale 8,nop,nop,sackOK], length 0
13:30:19.078342 IP 192.168.1.210.http >192.168.1.106.53190: Flags [S.], seq 4163517334, ack 1725365455, win 14600,options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
13:30:19.078649 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [.], ack 1, win 68, length 0


上面为一次三次握手建立连接的过程。

其中,格式为: 原地址 > 目的地址 : 标示,[S]标示SYN, 其中win表示窗口大小,也就是数据量的大小,可以用于流量控制,默认为4096,最大为65535,它是由一个16bit的字段表示的。

SYN: 同步序号连接标示,用来发起一个连接。

ACK: 应答标示,用来确认同步序号有效。

FIN:结束连接标示。


TCP三次握手过程

TCP的三次握手过程其实可以用一个简单的图表示:


TCP三次握手和四次断开


连接过程:

  1. 请求端(通常为客户端)发送一个SYN段的请求,指明了客户端打算连接的服务的端口以及初始序号ISN,假设这个把报文段为SYN0.

  2. 服务器发回包含服务端的初始序号的SYN报文段(SYN1)作为应答,同时在请求端发送的SYN上加1,以ACK的方式返回进行确认。之所以会加1是因为一个SYN将占用一个序号。

  3. 客户端必须将确认序号设置为服务端的ISN加1返回一个ACK,以对服务器端SYN报文进行确认.

这样就建立了连接。

这一个简单的过程可以理解为,你去商店买东西.

你向服务员发起一个请求,说:我要xxx,请你把它给我(SYN0);

服务员说:好的我已经收到你的请求(SYN1)您要的是xxx对吧(ACK=SYN0+1);

你说:是的(Ack).

然后你们就开始进行交易。


TCP 四次断开过程

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(HALF-CLOSE)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方

向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止

这个方向连接。当一端收到一个FIN,它必须通知应用层另一端几经终止了那个方向的数据传

送。发送FIN通常是应用层进行关闭的结果。

四次断开的图示如下:


TCP三次握手和四次断开

断开的过程:

  1. 当有一方要终止连接时,会向对方发送一个FIN的信号n.

  2. 接受方收到信息后,会回复一个ACK(n+1)表示已经收到请求,但此时并不会立即中断连接,而是去尝试关闭自身的连接。

  3. 当响应客户端关闭本地的TCP连接之后,会向请求端重新发送一个新的FIN m,表示此事响应端可以关闭。

  4. 请求端接受到FIN m的信号后,回复一个ACK,同时自己也进入TIME_WAIT状态,而响应端进入close状态。



这里应用TCP/IP协议卷的一张图,说明了主机在TCP交互过程中状态的变化:

TCP三次握手和四次断开

其实这些内容只是TCP协议的冰山一角,在这个交互过程中还有很多算法和协议规则,具体的细节大家可以参考TCP/IP协议卷。

推荐阅读:
  1. TCP三次握手详解和四次挥手
  2. TCP三次握手和四次握手

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

协议 tcp 三次握手

上一篇:怎么用border-style属性

下一篇:如何设置css中表格标题caption标签的位置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》