目录
UDP——用户数据报协议(User Datagram Protocol)
TCP传输控制协议 TCP(Transmission Control Protocol)
简介
在计算机网络中,网络层把分组发送到目的主机,但真正通信的并不是主机,而是主机中的进程。
传输层提供了进程间的逻辑通信,向高层用户屏蔽了下面网络层的细节,使得应用程序看起来像是有一条端到端的逻辑通信信道。
而TCP/UDP协议是传输层最重要的两种协议,提供了应用程序间的通信,它负责数据从发送端到接收端的信息流格式化和保证可靠传输。
UDP——用户数据报协议(User Datagram Protocol)
特点
-
面向无连接
不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据直接可以开始发送
-
不可靠性
体现在面向无连接的特性上,通信不需要建立连接,想发就发,尽最大可能交付
没有确认和重传机制,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
-
面向报文段
不会对数据报文进行任何拆分和拼接操作,保留报文的边界,只是添加UDP首部,具体来说
在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,没有拼接操作
在发送端,应用层将数据传递给传输层,UDP 只会给数据增加一个 UDP 首部,然后传递给网络层
如果发送端调用一次sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom,接收100个字节,而不能循环调用10次recvfrom,每次接收10个字节
所以UDP不能够灵活的控制读写数据的次数和数量
-
单播,多播,广播
UDP 支持一对一、一对多、多对多、多对一的方式
-
头部开销小
UDP头部大小8字节,TCP头部大小最小为20字节,最大为60字节,因此UDP传输开销比TCP小,传输数据报文时高效
UDP首部格式
UDP首部只有8个字节,包括源端口、目的端口、报文长度、校验和,12字节的伪首部用于计算检验(只检验,不恢复)时临时添加
TCP传输控制协议 TCP(Transmission Control Protocol)
特点
-
面向连接
通过三次握手与四次挥手实现连接的建立与释放一对一连接
-
可靠传输
采取以上多种方式来保证TCP的可靠性传输
-
面向字节流
TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输
-
点对点通信
每条TCP连接只能是一对一通信
-
全双工通信
通信双方都有发送缓存和接收缓存,应用进程在任意时刻都可以收发数据
TCP首部格式
端口号
一个TCP连接由四个要素唯一确定:(源IP,源端口号)+ (目地IP,目的端口号)
其中IP地址由上一层IP协议负责传递,源端口号和目地端口各占16位=2字节,也就是端口的范围是2^16=65535
从1024-65535是用户使用的端口范围,另外1024由系统保留
序号
TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过seq来确认发送的数据有序。如:现在序列号为1000,发送了1000字节,下一个序列号就是2000
确认号
用来响应TCP报文段,对上一次seq序号做出确认,给收到的TCP报文段的序号seq+1
头部长度
标识TCP首部有多少个4字节,4位1111最大表示15,则TCP首部最长为60字节,最短只有前20字节,不带选项
保留位
6位保留供以后使用
标志位
ACK 标识确认号是否有效(确认报文段)
RST 标识要求对方重新建立连接(复位报文段)
SYN 标识请求建立一个连接(同步报文段)
FIN 标识通知对方本端连接即将关闭(结束报文段)
URG 标识紧急指针是否有效
PSH 提示接收端应用程序应该立即从TCP接收缓冲区读取数据,为接收后续数据腾出空间
窗口大小
流量控制的手段,告诉对方本端TCP接收缓冲区还能容纳多少数据,控制对方发送数据的速度
校验和
由发送端填充,接收端对TCP报文段执行CRC校验检验报文是否损坏(包括首部与数据)
紧急指针
在URG