先复习下OSI七层模型
TCP/UDP工作在传输层
TPC/IP协议族
- ARP: 是正向解析地址协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址.
- RARP: 是反向地址转换协议,通过MAC地址确定IP地址.
- IP: 是因特网互联协议
Internet Protocol
- ICMP: 是Internet控制报文协议
Internet Control Message Protocol
,用于在IP主机、路由器之间传递控制消息. - IGMP: 是Internet组管理协议
Internet Group Management Protocol
,是协议族中的组播协议,运行在主机和组播路由器之间. - TCP: 传输控制协议
Transmission Control Protocol
,一种面向连接的、可靠的、基于字节流的传输层协议. - UDP: 用户数据报协议
User Datagram Protocol
,是无连接的、不可靠的、基于报文的传输层协议. - HTTP: 超文本传输协议
Hyper Text Transfer Protocol
,互联中应用最广泛的一种协议. - FTP: 文件传输协议
File Transfer Protocol
用户数据报协议 UDP(User Datagram Protocol)
UDP面向数据报,无连接,不可靠,可以一对一,一对多,多对一,多对多互相通信(组播)。
即无需确认双方状态,数据准备完毕即刻发送,也不需确认对方是否接收成功。
传输控制协议 TCP(Transmission Control Protocol)
面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信。每一个TCP连接只能是点对点(一对一)的。
三次握手
- 服务器等待连接中…
SYN=1,Seq=x
- 客户端已准备就绪,询问服务器是否就绪。SYN=1,Seq=y,ACK=1,ACKnum=x+1
- 服务端收到询问并已准备就绪,询问客户端是否就绪。ACK=1,ACKnum=y+1
- 服务器收到确认,双方确认完成,连接建立。- 开始发送数据
其中,步骤1-2是第一次握手,表明客户端发送正常且服务端接收正常;2-3是第二次握手,表明服务端发送正常,客户端接收正常。此时,客户端能确认自己和服务端都能正常发送、接收,但服务端还不知道客户端的接收能力。所以有了3-4的第三次握手,服务器确定了客户端接收和发送正常。此时连接建立,后续开始发送数据。
四次挥手
FIN=1,seq=x
- 客户端通知服务端我要断开了。ACK=1,ACKnum=x+1
- 服务端告诉客户端,我收到了断开请求。- 此时服务端不能立刻答复客户端关闭连接,因为可能还有数据在准备中,当这些数据发送完成后。
FIN=1,seq=y
- 服务端告诉客户端,你可以断开了。ACK=1,ACKnum=y+1
- 服务端收到客户端已经断开连接。- 服务端连接断开。
其中,第二次握手之后,并不是立刻断开连接,需要等待服务端将缓冲区的数据发送完毕。而第四次握手之后,服务端关闭了,但客户端需要等待两个握手时间再关闭:因为若服务器未收到最后的ACK
,会重新发起第三次握手请求,这个2次握手时间就是在等待这种可能的情况。若未收到第三次握手请求,客户端就可以正常断开了。