TCP
传输控制协议(Transmission Controller Protocol),是一个面向连接的协议,TCP套接字是一种流套接字,为用户进程提供可靠的全双工字节流。
UDP
用户数据报协议(User Datagram Protocl),是一个无连接协议,UDP套接字是一种数据报套接字,UDP数据报不能保证最终到达目的地,不保证各个数据报的先后顺序夸网络后保持不变,也不保证每个数据报只到达一次。
ARP
地址解析协议(Address Resolution Protocol),把一个IPv4地址映射成一个硬件地址(如以太网地址)。ARP通常用于诸如以太网、令牌环网和FDDI等广播网络,在点到点网络上并不需要。
###RARP
反向地址解析协议(Reverse Address Resolution Protocol),把一个硬件地址映射成IPv4地址,有时用于无盘节点的引导。
TCP建立连接的三次握手
服务器端准备好接受外来的连接,通过调用socket、bind和listen这3个函数来完成,称之为被动打开(passive open)。
客户端通过调用connect发起主动打开(active open),客户端TCP发送一个SYN(Synchronize Sequence Numbers),告诉服务器客户端将在连接中发送的数据的初始序列号。
服务器必须确认(ACK, Acknowledgement Number),同时自己也得发送一个SYN,它含有服务器将在同一连接中发送的数据的初始序列号。
客户端必须确认服务器的SYN。
TCP终止连接的四次握手
应用进程调用close,执行主动关闭(active close)。该端的TCP于是发送一个FIN(Finish)分节,表示数据发送完毕。
接收到这个FIN的对端执行被动关闭(passive close)。这个FIN由TCP确认,它的接收也作为一个文件结束符传递给接收端应用进程,因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
接收到这个文件结束符的应用进程将调用close关闭它的套接字,发送一个FIN。
接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
TIME_WAIT状态
该状态的持续时间是最长分节生命期(maximum segment lifetme, MSL, RFC1122建议值是2分钟, linux为30s)的两倍,有时称之为2MSL。TIME_WAIT状态可以可靠地实现TCP全双工连接的终止,允许老的重复分节在网络中消逝。TIME_WAIT确保有足够的时间让对端收到ACK,如果被动关闭的那方没有收到ACK,就会触发被动端触发重发FIN,并且保证有有足够的时间让这个连接不会跟后面的连接混在一起。