TCP(传输控制协议)

TCP是面向连接的传输层协议,使用“三次握手”建立TCP连接,“四次挥手”释放连接,仅支持单播。

TCP是面向字节流的,把应用进程交付下来的数据块看作一连串无结构的字节流,存储在发送缓冲区,每次从发送缓冲提取一定数量的字节构建TCP报文段并发送,接收方从接收到的TCP报文段取出有效载荷部分存储在接收缓冲区,每次提取一定数量的字节交付给应用进程。(TCP不保证接收方应用进程收到的数据块与发送方应用进程发出的数据块有对应的大小)。TCP面向字节流是实现可靠传输,流量控制,拥塞控制的基础。

TCP提供可靠的传输服务。面向字节流,传输慢。适用于要求可靠传输的应用,如文件传输,邮件传输。

TCP首部最小20字节,最大60字节:

TCP和UDP_UDP

源端口号/目的端口号:表示数据从哪个进程来,要到哪个进程去。

32位序号:TCP将传输的每个字节都进行编号,需要时本报文段第一个字节的编号。

32位确认序号:表明该序号前的所有数据都已经收到,指明期待收到的下一个字节序号。只有当ACK标志位1时才有效。

数据偏移(4位首部长度):表示TCP头部有多少个4字节,可根据该部分将TCP报头和有效载荷分离。TCP头部最大长度15*4=60字节,默认大小为20字节。

  • URG:表示紧急指针是否有效
  • ACK:表示确认号是否有效
  • PSH:提示接收端应用程序立即将接收缓冲区的数据拿走
  • RST:它时为了处理异常连接的,告诉对方我们的链接还没有建立好,要求对方重新建立连接。
  • SYN:请求与对方建立连接。我们把携带SYN标识的称为同步报文段。
  • FIN:通知对方关闭连接。我们把携带FIN标识的称为结束报文段。

16位窗口大小:接收方将自己接收缓冲区剩余空间大小告诉发送方,发送方根据窗口大小调整发送速度。流量控制。

16位校验和:CRC校验TCP首部和TCP数据部分。

16位紧急指针:报文想被接收端优先处理,可以设置紧急指针,指向该报文即可,同时将紧急指针有效位URG置1。

UDP(用户数据报协议)

UDP是无连接的传输层协议,双方可以随时发送数据无需建立连接,支持单播,多播,广播。

UDP是面向报文的,将应用进程交付下来的数据直接添加UDP首部然后发送,接收方去掉UDP首部后,把数据报交付给应用进程。也就是说,UDP对应用进程交付下来的报文既不合并,也不拆分,而是保留这些报文的边界。(UDP只存在接收缓冲区,不存在发送缓冲区,因为UDP不保证可靠性,没有重传机制,TCP不同,当报文丢失时,TCP必须保证重新发送,所以必须要具备发送缓冲区,当然TCP也有接收缓冲区)

UDP没有确认和重传机制,提供不可靠的传输服务。面向报文,传输效率高。适用于即时通讯服务,如IP电话,视频会议。

基于UDP的应用层协议:DNS域名解析协议,DHCP动态主机配置协议

UDP首部仅8字节:

TCP和UDP_TCP_02

长度:整个数据报(UDP首部+UDP数据)的长度。

检验和:如果检验出误码,就会直接丢弃数据报。

参考:

​https://blog.csdn.net/ningmengshuxiawo/article/details/115413766​

​https://blog.csdn.net/hansionz/article/details/86435127​