UDP/TCP协议全解

目录

[一. UDP协议](#一. UDP协议)

1.UDP协议概念

2.UDP数据报格式

3.UDP协议差错控制

[二. TCP协议](#二. TCP协议)

1.TCP协议概念

2.三次握手与四次挥手

3.TCP报文段格式(重点)

4.流量控制

5.拥塞控制


一. UDP协议

1.UDP协议概念

当应用层的进程1要向进程2传输报文,会将报文转给传输层处理;UDP会在报文前加上一个UDP首部(只占8字节),组成一个UDP数据包;最后再发到网络层,网络层再加上一个IPV4首部,根据这个首部信息找到目的地址;然后主机B收到这个IP数据包以后,进行逆操作


  • UDP首部很小,只占8B
  • UDP会拒绝过大的报文,因为它每次只能传输一个完整报文,不支持拆分、重装
  • UDP无连接、不可靠的(无报错确认机制,由应用层完成),不支持拥塞控制(路由器过载运作,传输数据报的速度不会慢下来)
  • UDP支持一对一+一对多(一对一封装成单播IP数据报,一对多封装成广播、多播IP数据报)

UDP一对一的方法与TCP相同

一对多是通过目的IP为 255.255.255.255 (广播IP,往目的网络所有的主机进行数据发送),然后后面加上一整个UDP协议下的数据报。UDP能支持广播很重要的一个原因在于:不需要进行拆分、重装,可以一次性全部传输完;同时,UDP是通过UDP首部中设置目的端口号来寻找目标主机,然后对目的端口的所有主机进行数据传输(TCP也是通过目的端口寻找目标主机,但找到一众目标主机后只能与其中之一进行连接),所以可以通过端口号一次性找到多台目标主机(如下图,主机A要向目的网络的所有端口为711的主机发送消息)

2.UDP数据报格式

**UDP长度:**声明数据报大小,固定只有16比特(即65535字节,2^15+2^14+......+2^0 = 65535);由于一个IP数据报可以运输的最大数据量是65515字节,因此UDP协议下的数据报最大只能是65535字节;UDP长度应该是UDP首部+报文的大小,不是单指报文大小

**UDP校验和:**由发送方计算并输入,接收方检验是否错误,全0代表无需校验

3.UDP协议差错控制

**检验信息的生成与使用:**若有32bit数据信息,相加以后逐位取反;此时数据相加的结果,与取反以后的检验和相加,应该正好为全1(数据为0的地方,检验和肯定为1;数据为1的地方,检验和肯定为0);接收方只要看检验和与数据相加以后是否为全1,如果为全1就代表没出差错;如果最高位产生进位,就需要"回卷"加到最低位

**UPD检验的过程:**生成检验和前,先在UDP首部前生成一个伪首部;把伪首部、UDP首部与数据部分分以16bit为一组,进行检验和生成;生成了以后去除掉伪首部,通过网络层传输以后,接收方接受了以后也需要生成伪首部,然后判断相加是否为1(具体流程如下图)

IP协议的首部检验和方法与UDP大致相同,只是IP检验和数据部分不参与,UDP检验和要将数据部分也算上;同时,IP进行校验和时不需要添加伪首部

二. TCP协议

1.TCP协议概念

UDP与TCP之别

TCP首部很大且大小可变,要有20字节~60字节;TCP可以对报文进行分组、重装传输,因此可以传输大的报文(类比成分组交换);TCP需要连接(类似于电路交换),且会发送接受成功、接受错误信息 -> 可靠,并且能够进行流量控制,并且只能一对一;TCP传输内容叫做报文段(面向字节流),UDP传输内容叫做数据报(面向整体报文)


TCP特点

n个TCP报文段可能乱序到达接收方,但TCP协议会按序向应用层递交;每次建立TCP连接以后,可以双向传输多个报文;MSS是由通信双方决定的报文段最大段长,TCP不要求报文段满载,只要别超过MSS即可

2.三次握手与四次挥手

注:挥手操作A、B两端谁先结束,谁先释放连接


三次握手

握手1、握手2不能携带数据,但是仍要消耗一个序号;握手3可以携带数据,不携带数据就不消耗序号,此处的序号指的是ack、seq后面的数字;接收端的序号与发送端的区号是可以不一样的,可以理解成两端发送的数据不一样

客户端、服务器进程TCP状态变化如下图所示


四次挥手

挥手1、挥手3即使不携带数据,也要消耗1个序号;挥手2可以携带数据,挥手4不可以携带数据

客户端、服务器进程TCP状态变化如下图所示。MSL指的是最长报文段寿命,1MSL指800ms,2MSL代表1600ms过后客户端才会真正关闭连接

3.TCP报文段格式(重点)

序号(seq):用于标记数据部分第一个字节在原始字节流的位置,起始序号由发送方自己设置(不一定从0开始)

确认号(ack或者ack_seq):用于反馈,表示序号在该确认号之前的所有字节都已正确收到;ACK = 0 时,ack 无效,ACK = 1 时,ack 有效;只有第一次挥手时,ack会是无效的,其他情况下ack都应该有效(若无效则说明出现了差错,例如报文段丢失)

数据偏移(data offset):表示TCP首部长度,以4字节为单位**(比如现在的tcp首部只有3字节,那么此时就需要通过后面的填充部分加上1字节),**表示形式是字节实际存储用的是比特位

保留:暂时没用,通常全设置为0

填充:被用来解决数据偏移问题,凑足4字节的整数倍

URG(紧急位):只占1bit,为1时表示是紧急数据要尽快插队发送;当该位为1时,会让紧急指针有效,紧急指针存放了紧急数据专用序号

PSH(推送位):为1时希望接收方尽快回复

RST(复位位):为1时表示出现严重差错(例如主机崩溃),必须释放连接;或者需要拒绝一个非法报文段(例如恶意的黑客攻击)

SYN(同步位):为1时表示这是一个连接请求或连接接受报文;只在握手1、握手2中,SYN = 1

FIN(终止位):为1时表示请求释放连接报文;只在挥手1、挥手3中,FIN = 1

窗口(rwnd或者rcvwnd):用作流量控制,假设现在的接受缓冲区还剩下500B空间,那么此时的rwnd = 500(即接收方还能接受多少数据)

检验和:和UDP原理一样

选项(长度可变):协商决定了在握手1、握手2当中,MSS字段大小多少

4.流量控制

窗口大小与MSS大小不一的原因:接受发送的端口,主机的处理能力不一样

如果缓冲区域大小为3000字节,那么滑动窗口大小为3000字节,当被占满以后处理了2000字节,此时的滑动窗口大小为2000字节。不同的滑动窗口大小,在回复信息时的rwnd大小都不一样,同时为0时的ACK主要是告诉发送方接受成功。

5.拥塞控制

cwnd是针对发送方而言的,一个限制性的滑动窗口

超时:如果发送了当前窗口大小的数据量,在规定的时间内没有接收到接收方发来的确认好,那么就会超时重传;发送超时重传以后,慢开始的下限值会变成当前滑动窗口的一半大小,然后又开始进入到慢开始阶段

3-ACK:收到了一条数据的三次确认信息,说明有该数据发送失败了;此时停止发送,然后将传输失败的数据快重传;因为并非由于数据过多而导致的传输失败,因此不用进行慢开始;变一半同超时

相关推荐
DjangoJason6 小时前
计算机网络 : 应用层自定义协议与序列化
linux·服务器·计算机网络
I won.7 小时前
计算机网络 TCP篇常见面试题总结
tcp/ip·计算机网络·github
左灯右行的爱情7 小时前
计算机网络-网络层
计算机网络
Amo Xiang11 小时前
计算机网络第1章(下):网络性能指标与分层模型全面解析
计算机网络·网络性能指标·网络分层模型
飞扬202415 小时前
计算机网络之路由表更新
计算机网络·智能路由器
2301_7931024915 小时前
Linux——计算机网络基础
计算机网络
爱玩火影的村里人15 小时前
计算机网络
计算机网络
持之以恒的天秤17 小时前
Socket编程基础
计算机网络
Not Talk1 天前
重学计算机网络之以太网
计算机网络
丶Darling.2 天前
26考研 | 王道 | 第六章 应用层
计算机网络·考研·学习笔记·王道