Linux网络编程 |【第二篇】TCP协议的建立连接三次握手、关闭连接四次握手

一、TCP协议

在这里插入图片描述

1、建立连接三次握手

【第一次】客户端发送一个带SYN标志的TCP报文到服务器:

  • 客户端发出段1,SYN位表示连接请求;
  • 且带序号,序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,便于在接收端可以根据序号排出数据包的顺序,也可以发现丢包的情况
  • 规定SYN位FIN位也要占一个序号,若发了SYN位,则再发送应该用序号加一;
  • mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。

【第二次】服务器端回应客户端,带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。

服务器发出段2,也带有SYN位,同时置ACK位表示确认确认序号,表示"我接收到该序号及其以前所有的段,请你下次发送该序号的段",答了客户端的连接请求,同时也给客户端出一个连接请求,同时声明最大尺寸为1024

【第三次】客户必须再次回应服务器端一个ACK报文

客户端发出段3,对服务器的连接请求进行应答,确认序号。在这个过程中,客户端和服务器分别给对方发了连接请求且应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为【三方握手】。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值最大段尺寸等。

2、数据传输

【第一次】

客户端发出段4,包含从序号1001开始的20个字节数据。

【第二次】

服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据

【第三次】

客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据。

在数据传输过程中,ACK确认序号是非常重要的,应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ACK段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区中的数据包重发

3、关闭连接四次握手

	由于TCP连接是【全双工】的,故每个方向都必须【单独进行关闭【。这原则是当一方完成它的数据发送任务后就
	能【发送一个FIN来终止】这个方向的连接。收到一个 FIN只意味着这一方向上【没有数据流动】,一个TCP连接在
	收到一个FIN	后【仍能发送数据】。首先进行关闭的一方将执行【主动】关闭,而另一方执行【被动】关闭。

【第一次】

客户端发出段7FIN位表示关闭连接的请求。

【第二次】

服务器发出段8应答客户端的关闭连接请求。

【第三次】

服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求

【第四次】

客户端发出段10应答服务器的关闭连接请求。

	建立连接的过程是三方握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常【不合并在一个段
中】,因为【有连接半关闭】的情况,这种情况下【客户端关闭连接之后就不能再发送数据给服务器了】,但是【服务
器还可以发送数据给客户端】,直到服务器也关闭连接为止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值