在说TCP之前,我寻思着高低得先看看其他入门一些的协议,以了解基本原理。
(就决定是你了,UDP出来挨打,并不),首先让我们一起了解一下鼎鼎大名的传输层那个UDP协议。
16位源端口号:从哪来
16位目的端口号:到哪去
16位UDP长度:UDP首部+UDP数据的最大长度
16位UDP检验和:检测用的,发现报文错误就直接丢弃.
UDP的特点:
UDP传输的过程类似于寄信.
无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层 返回任何错误信息;
面向数据报: 不能够灵活的控制读写数据的次数和数量
UDP的缓冲区
UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后 续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃
UDP使用注意事项
我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首 部). 然而64K在当今的互联网环境下, 是一个非常小的数字. 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;
TCP协议(主角来咯)
源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去
4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60
序号,用来标识自己发送出去的报文,确认序号,告诉对方从XX号以前我都已经收到了.
16位窗口大小:
在说这个之前,我们需要知道,TCP协议具有接收缓冲区和发送缓冲区的概念
可以看见,每次发送和接受,我们都是需要把OS接口的信息拷贝到缓冲区后在做相关的处理的,所以,我们也要考虑缓冲区容量的问题。16位窗口大小代表自己接收缓冲区还剩多少空间.