传输层,负责应用程序之间的数据传输的协议,UDP与TCP
UDP协议格式:
源端口与目的端口: 都为16位比特位,表示数据从那个进程来,发送到哪里去,负责应用程序之间的数据传输。
数据报长度: 16位比特位,表示UDP报文头部在内的整体数据报长度,由于其为16比特位,能表示的最大大小为65535,也标志着,UDP数据报最大大小为65535。
校验和: 16比特位,用于判断接受到的数据和发送的数据是否一致。
UDP协议的特性:
无连接,不可靠,面向数据报。
- 无连接:通信的时候,不需要建立连接,只需要知道对方的地址信息,就可以发送数据。
- 不可靠:通信的过程中,并不保证数据安全可靠以及有序到达对端。
- 面向数据报:因为UDP是有最大传输大小的,数据过长的话,则需要程序员自己在应用层手动将数据报进行分割。
TCP协议是TCP/IP协议族中一个重要的协议,更加靠近应用层,具有更强的可操作性。
TCP服务的特点
- 面向连接
使用TCP协议通信时,双方必须先建立连接,然后才能进行数据的传输,双方都必须为其分配一定的内核资源,用于管理连接信息,通信结束后,双方都需要释放内核资源。同时TCP是一个全双工通信。 - 可靠传输
TCP采用发送应答的方式,发送端发送的每一个数据都必须得到接收端的应答,才能认为这个数据发送成功,同时TCP采用超时重传机制,如果在规定时间内没有收到接收应答,则重新发送一份。 - 面向数据流服务
将数据进行划分传输,接收方接收的数据包可能是乱序,重复的,所以还需要对其进行重排,整理最后发送给应用层。
注意:使用TCP协议,不是简单的双方通信协议,而是发送方将数据放入发送缓冲区中,当TCP模块真正发送数据的时候,才从缓冲区中读取数据;对方主机接收到数据后,先是将数据放入到接收缓冲区中,通知应用程序接受数据。
TCP协议头部结构
TCP头部信息出现在每个TCP报文段中,用于指定通信的源端口,目的端口,管理TCP连接等。TCP头部结构分为:固定头部结构,头部选项。
- 固定头部结构
- 源端口号:表示该数据报来自哪。
- 目的端口号:表示发送给哪。
- 32位序号:通信从建立到断开,过程中一个传输方向序号值加上偏移量。
- 32确认号:用于对另一方发送过来的TCP报文段进行响应,值是收到TCP报文序号值+1。
TCP建立连接与断开连接
TCP半关闭状态
因为TCP是一个全双工通信,所以允许两个方向都进行独立关闭。通信的一方可以给对方发送结束报文,告诉对方已经完成数据通信,也允许对方继续给自己发送数据,直到对方也发送结束报文后,则会关闭连接。这种单方面关闭的状态称为半关闭状态。
TCP超时重传与连接超时
超时重传: TCP底层有一个计时器,当发送端在计时器规定的时间内没有收到接收端接收相应,发送端则认为接收端没有收到数据,则重新发送一个数据报给接收端。
**连接超时:**当客户端与服务器距离很远,或者网络异常,导致服务器对客户端发送的连接请求没有应答,则客户端将重新连接,如果重连失败,则通知程序连接超时。