用户数据报协议(UDP)
UDP是简单的传输协议,采用数据报的形式发送到目的地,数据报长度有限,且缺乏可靠性,发出去了就不关心了。一般在一些实时性较高的场景下使用,如语音、视频等
传输控制协议(TCP)
相较于UDP,TCP提供了可靠性。
TCP含有动态估算客户端与服务端的往返时间(RTT)的算法,以便知道等待一个确认需要多少时间。
TCP通过给每个字节关联一个序列号对所发生的数据进行排序,这样在接收到端的重复、错排数据时,可以根据序号进行去重、排序。
TCP提供流量控制,任何时候都会告诉发送端本地缓冲区的可用量,当发送端发送过来数据时缓冲区减少,当接收端读取时,缓冲区就会被释放,当缓冲区可用大小为0时就不能再对端接收数据。
TCP是全双工的,任何一段既可读也可写。
三次握手建立连接
- 服务端通过socket、bind、listen三个函数被动打开,客户端通过connect主动打开,并向服务端发生SYN加初始化序号(J)
- 服务端确认收到客户端SYN,同时自身也返回SYN加自身初始化序列号(K)加 ACK J+1
- 客户端确认服务器的SYN,发送ACK K+1
四次挥手关闭连接
- 一端调用close,主动关闭,通常为客户端,发送一个FIN分节表示数据发送完毕。
- 接收到FIN对端被动关闭,该接收也作为文件结束符放在缓冲区其它数据之后。
- 一段时间后,接收到文件结束符的应用程序,也调用自身的close关闭它的套接字,并向那端也发送一个FIN
- 对端确认这个FIN
UDP和TCP