本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力。
TCP三次握手与四次挥手
三次握手:
TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略
- 第一次客户端向服务端询问,发送syn
- 第二次服务端向客户端回答,发送syn+ack
- 第三次客户端向服务端回答,发送ack
- 连接建立
为什么不是两次握手而是三次握手?
就是因为客户端最后发送的ack就是为了确保建立可靠的连接
假如第一次syn发送失败,第二次又发送一次成功了,建立连接后第一次的包又成功发送了,服务端以为客户端发送请求建立新的连接,这就造成了客户端以为只有一个连接,服务端却认为有两个连接
四次挥手:
当被动方收到主动方的报文通知时,它仅仅表示主动方没有数据再发送给被动方了
但未必被动方所有的数据都完整的发送给了主动方
所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接
所以这里的ACK报文和FIN报文多数情况下都是分开发送的
- 第一次客户端向服务端发送fin包请求关闭
- 第二次服务端发送ack进入等待关闭状态
- 这时客户端还可以接收数据,服务端还可以发送数据
- 第三次服务端发送fin包给客户端,进入最后确认状态
- 第四次客户端回复ack包给服务端,服务端收到后直接断掉,客户端进入超时等待,超时后自动断开
为什么有第四次?
因为超时等待
ack发送给服务端,如果服务端没有收到ack,那么会请求重新发送
然后客户端重新发送,如果客户端发送ack后直接断掉,服务端没收到ack就可能一直停留在最终确认状态
TCP/IP,UDP和TCP区别
TCP/IP
- TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于TCP/IP 族内的协议
- TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层
UDP
- UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议
- UDP是无状态通信,所以性能消耗少,更快,但没有tcp稳定,而且不存在备份,因为不能确认丢包,当报文发送之后,是无法得知其是否安全完整到达,所以也是不可靠的
- UDP有单播,多播,广播的功能
- UDP面向无连接,不需要和 TCP一样在发送数据前进行三次握手建立连接,想发数据就可以直接发送。并且不会对数据报文进行任何拆分和拼接操作
- 面向报文,UDP对应用层交下来的报文,不合并、不拆分,但会保留这些报文的边界。因此,应用程序必须选择合适大小的报文
TCP
- 和UDP正好相反的是面向连接,建立连接的方法是三次握手,这样能建立可靠的连接,因此也是可靠的
- 不像UDP,它只能是一对一通信
- 面向字节流,和UDP相反,TCP不保留报文边界的情况下以字节流方式进行传输