学习并解读TCP的三次握手、四次挥手(一)

在此之前了解了一下TCP协议及其请求连接和释放连接的过程,TCP协议工作在传输层,为用户提供可靠的端到端的连接,保证报文的正确传输。

学习TCP协议是如何提供两端的连接之前,先学习一下TCP协议用于提供可靠连接的"工具"——TCP协议报文

 

TCP协议的报文格式让TCP协议的连接和传输变得可靠

看着很复杂,不过可以暂时初步了解比较重要的几个部分:

  • 源端口、目标端口:计算机上的进程要和其他进程通信需要通过计算机端口,而一个计算机端口
  • 某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道哪两个进程通信。
  • 序列号:seq序号,占32位,用来标识从TCP源端口向目的端口发送的字节流,发起方发送数据时对此进行标记。
  • 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
  • 标志位:共6个,URG、ACK、PSH、RSH、SYN、FIN,具体含义如下:
  1. URG:紧急指针位,0表示无效,1表示有效
  2. ACK:确认序号有效
  3. PSH:收到数据包后是否直接传给应用程序使用,或传到buffer
  4. RST:重置位,0表示正常,1表示异常需要重传
  5. SYN:同步位,代表发起一个新连接
  6. FIN:代表释放一个连接

大致了解过报文中部分标志的意义后,可以开始对照三次握手学习原理:

  1. 客户端向服务端发送报文,报文中将SYN置1表示这是一个连接请求seq放置为x,用来标识自己客户端的身份,发送后客户端进入SYN_SENT状态,等待服务端确认。。
  2. 服务端收到报文后表示同意连接,回复报文,报文中将SYN置1表示这是连接请求seq放置为y,用来标识自己服务端的身份,标志位ACK置1使确认序号ack有效,ack放置x+1这里的x是目标客户端的标识,表示我收到的是你的连接请求,而不是别人的。将此报文发送回去表示我收到了,确认连接请求,服务端进入SYN_RCVD状态。
  3. 客户端收到服务端传来的报文后,检查确认序号ack是不是自己的序列号x基础上+1,检查确认后,可以连接了,将确认序号换成服务端的y+1,发送回去,客户端转为客户端进入ESTABLISHED状态(连接成功)。
  4. 服务端拿到并确认后,同样进入ESTABLISHED状态,此时三次握手完成,客户端与服务器已建立通讯连接。

在传输层中,TCP协议提供了面向连接的协议,反复确认后的连接,保证网络传输稳定,同时也有重传机制,保证数据的完整性;

同样,在传输层中的UDP协议则是非面向连接的协议,在发送时不会有所谓TCP协议报文中的序列号和确认号这样的字段,不会有TCP协议表现出来的数据传输的完整性和稳定性,但正因为如此,UDP协议相对于TCP协议的优势在于传输更快,适用于对丢包不是很在意的场景,比如QQ语音视频,为了保证实时性(延迟低),即使有少量丢包稍微卡顿也不会有太大影响。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值