TCP/IP协议——三路握手、四路挥手

12 篇文章 3 订阅
1、TCP三路握手连接

TCP通过三路握手来建立连接,建立一个TCP连接时,需要客户端和服务器端总共发送三个包以确认来凝结的建立,在socket编程中,这一过程由客户端执行connect来触发,
TCP是面向字节流的,通过TCP传送的字节流中每个字节都是按顺序编号,Sequence Number字段值指的是本报文段数据的第一个字节的序号,Acknowledgement Number 是期望收到对方下一个报文段的第一个数据字节的序号。
在这里插入图片描述

  • offset:占4位,TCP报文段报头长度包括固定的20字节和TCP option字段;
  • reserved:占6位,保留;
  • Window:占2个字节。窗口值是指发送者自己的接收窗口大小,因为接收缓存的空间有限。
  • CheckSum:占2个字节。和UDP报文一样,有一个检验和,用于检查报文是否在传输过程中出差错。
  • Urgent Pointer:占2字节。当URG=1时才有效,指出本报文段紧急数据的字节数。
  • TCP flags 的C、E、U、A、P、R、S字段代表该报文的性质:
    C(CWR)、E(ECN):用来支持ECN(显示阻塞通告);
    U(URG):URG=1时,它告诉系统此报文中有紧急数据,应优先传送;
    A(ACK):仅当ACK=1时确认号字段才有效,建立TCP连接后,所有报文段都必须把ACK字段设置为1;
    P(PUSH):若TCP连接的一段希望另一端立即响应,PSH开始催促对方,不再等到缓存区填满才发送;
    R(RESET):若 TCP 连接出现严重差错,RST 置为 1,断开 TCP 连接,再重新建立连接。
    S(SYN):用于建立和释放连接,当SYN=1时,表示建立连接。
    F(FIN):用于释放连接,当 FIN=1,表明发送方已经发送完毕,要求释放TCP 连接。

1. 第一次握手:客户端向服务器端发送SYN报文,并设置发送序号为X.等待服务器确认;
2. 第二次握手:服务器收到客户端发送的SYN报文后向客户端发送SYN+ACK报文,并设置发送序号seq为Y;
3. 第三次握手:客户端收到后再次发送SYN报文,然后设置发送序号为Z,在确认序号为Y+1并且客户端和服务器端就开始传输数据.
在这里插入图片描述

TCP三路握手连接的意义在于通知对方自己的初始化序号,也就是seq,这是作为之后数据传输的依据,以保证TCP传输中不会出现错误混乱。TCP三路握手的必要条件:

  • 服务器必须准备好接受外来的连接,通常调用socket()、bind()和listen()三个函数来完成,被称为被动打开;
  • 客户端通过调用connect()函数主动打开,也就是客户端发送一个SYN告诉服务器端自己在连接中发送的的初始化序列号SYN分节不携带数据;
  • 服务器端必须确认客户端发送的SYN,而且在回应客户端的时候必须也要发送一个SYN告诉客户端自己在连接中发送的初始化序列号;
  • 客户端必须确认服务器端发送的SYN。
2、TCP四次挥手断开连接
  1. 第一次挥手:客户端发送一个FIN=M(释放连接),来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态,意思就是告诉服务器端:“我没有数据要发送给你了,如果你服务器端还有数据没有完成就不需要关闭连接可以继续发送数据”;
  2. 第二次挥手:服务器端收到客户端发送的FIN之后,先发送ack=M+1,告诉客户端:“你发送的请求我收到了,但是我还有数据没有完成请继续等待”此时客户端就进入到FIN_WAIT_2等待状态;
  3. 第三次挥手:当服务器端确定数据已经接收完成,给客户端发送FIN=N报文,告诉客户端:“我已经完成数据接收,可以关闭连接了,届时服务器端进入LAST_ACK状态”。
  4. 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是为了以防万一,他还需要给服务器端再次发送ack=N+1后进入TIME_WAIT状态,如果服务器端没有收到客户端发送的ack报文,客户端会继续重传,直到服务器端收到ack后就知道可以关闭连接了,客户端等待一段时间(2*MSL((Maximum Segment Life))后依然没有收到回复,则证明服务器端已经正常关闭;届时客户端也关闭连接,完成四次握手关闭连接。
    在这里插入图片描述
    TCP连接的可靠性体现:
    (1)TCP报文的长度可变,根据收发双方的缓存状态、网络状态而调整;
    (2)当TCP收到发自TCP连接另一端的数据,它将发送一个确认;
    (3)当TCP发送一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不嫩发即使收到一个确认,将重发这个报文段;
    (4)TCP将保持它绸布和数据的检验和,如果通过检验和发现报文段有差错,这个报文段将被丢弃,等待超时重传;
    (5)TCP将数据按字节排序,报文段中有序号,以确保顺序的正确性;
    (6)TCP还能提供流量控制,TCP连接的每一方都有收发缓存,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使减慢主机的缓冲区溢出。
    TCP报文传输采用接收后返回确认的方式来保证报文传输的可靠性传输,并不意味着发送方在发送一个报文段后就进入等待确认状态,让后面的报文等待,也不是接收方在接收到一个报文后,对每一个报文都要进行报文确认。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mierya0707

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

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

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

打赏作者

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

抵扣说明:

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

余额充值