第五章 运输层
第五章 传输层
1. 概述
1. udp特点
- 无连接。发送数据前不需要建立连接,发送结束也不需要断开连接
- 最大努力交付 也就是不可靠交付
- 支持1对1 1对多 多对多通信
- 没有拥塞控制工能
- 面向报文的,对于应用层下来的报文 不会拆分,也不会合并
- 首部开销小 只有8个字节
2.tcp特点
- 面向连接的,发送数据前需要建立连接,发送结束 需要断开连接
- 可靠交付。没有失序 重复 丢失的问题
- 支持支1对1通信
- 全双工通信
- 面向字节流
2. UDP(用户数据包协议)
- 源端口
- 目标端口
- 长度 UDP首部和UDP数据部分之和
- 校验和 校验 数据和首部两部分
3.tcp(传输控制协议)
TCP首部
TCP首部=固定(20字节)+选项(可变部分最大40字节)
-
数据偏移:占4个二进制位,单位是4字节,最大值是60字节。
- TCP报文中,数据部分的起始处 距离TCP报文段起始处的距离
- 也是TCP首部的长度。首部最大长度是60字节,首部固定是20字节,所以选项最大是40字节
-
检验和:检验的是数据部分和首部部分 以及12字节的伪首部。
-
保留:目前还没有什么用途,全为0。
-
源端口 目的端口 各占2字节
-
序号:符号seq,TCP是面向字节流的,在一个TCP连接中 传送的字节流中的每个字节都是按顺序编号的。(为了做到可靠传输)
- 占4字节 大小是 从[0,232-1],当序号增加到232-1之后,会从0开始
- 举例:发送400字节。
- 序号0 ,0-99字节
- 序号100 ,100-199字节
- 序号200 ,200-299字节
- 序号300,300-399字节
-
确认号:符号ack,占4字节 ,期望收到对方下一个报文段的第一个数据字节序号。
-
当ACK=1的时候,确认号才有效。
-
TCP为了实现可靠传输,接收方在收到几个数据报后,就需要给发送方 发送一个确认数据报,告诉发送方下一个数据报该发送第多少个字节了。
-
如果确认号是N,代表,发送方下一次要送第N个字节的数据,而且还代表接收方已经收到了N-1
-
-
窗口:占2字节。TCP有流量控制功能,窗口值告诉对方(发送方):从本报文段的确认序号算起,接收方目前允许发送方发送的数据数量,单位是字节。
- 距离 ack=10,rwnd=10 发送方可以发送 10-20这个范围里的数据。
-
六个二进制位
- URG:URG=1的时候,紧急指针字段有效。告诉系统报文段中有紧急数据,应尽快传送,不再按原来的排队顺序排队发送。
- 实际上是让 发送端 快点发。
- 推送PSH:当两个应用进程进行交互通信的时候,有时需要一方的指令能够得到对方的立即相应。
- 实际上是让 接收方,快点往出取
- 复位RST:RST=1,表明tcp连接出现了差错需要,重新连接
- 同步SYN:TCP用于最初连接建立的同步序号。
- SYN=1,ACK=0,代表这是个连接请求报文段
- 如果对方同意建立连接:相应报文段中 :SYN=1,ACK=1
- 确认ACK:当ACK=1,的时候,确认号 才有用。ACK=0的时候,确认号没有用。
- 规定在连接建立后,所有的报文传送段必须把ACK设置为1
- 终止FIN:用来释放连接。方FIN=1,表示此报文的发送方 数据已经发送完毕,并要求释放连接。
- URG:URG=1的时候,紧急指针字段有效。告诉系统报文段中有紧急数据,应尽快传送,不再按原来的排队顺序排队发送。
-
紧急指针:当URG=1的时候才有效。指出 紧急数据的末尾在 报文段数据部分的位置
- TCP报文段:固定首部20 ,数据部分是1000字节。URG=1,紧急指针值是100,代表 数据部分前100字节是紧急数据。
流量控制 和拥塞控制
-
流量控制: 为了避免接收端 接受处理不过来,而调节发送端的发送速率,利用的是接收端的接受窗口 来调节发送端的滑动窗口
-
拥塞控制:为了避免 网络拥堵,而调节发送端的发送速率,利用的是 拥塞窗口,来调节发送端的滑动窗口
实际发送端的滑动窗口是 接收窗口和拥塞窗口的最小值
可靠传输的实现 --停止等待协议以及该进
停止等待协议:发送端 每发送一个数据,就等待接收端的确认,等收到确认了,才会发送下一个分组。分组需要编号
超时重传(自动重传请求ARQ):接受端每发送一个数据,就可是计时,如果在倒计时时间到 没有收到确认信息,就开始重传。
停止等待协议 信道利用率低,所以实际用的是 连续ARQ协议
TCP拥塞控制的四种算法: 慢开始 拥塞避免 快重传 快恢复
- 慢开始:由小到大逐渐增大 拥塞窗口的数值,先初始拥塞窗口为1个最大报文段MSS,等收到确认报文之后,拥塞窗口再乘以2
- 拥塞避免:当慢开始窗口增大到 门限值的时候,拥塞窗口 开始每次增加1
- 快重传:当接受方受到一个失序的分组之后,就立马发出三个重复确认 ,告知发送方丢失的数据,并立马重传
- 快恢复:当发送方 受到某个分组三次重复之后,门限值减半,而拥塞窗口也减为一半,而执行拥塞避免算法,而不是执行 慢开始算法
MSS:最大报文段 指的是tcp报文的数据部分最大长度
考题
1. 为什么在tcp首部里有一个首部长度字段 而在udp首部没有这个字段
tcp首部长度不固定 ,udp首部长度固定
2.为什么tcp首部中要把tcp的端口号放入最开始的4个字节
ICMP报文的数据部分 有 ip报文的首部和8个字节的ip数据包数据内容,这里边有tcp的源端口 和目标端口,当tcp收到这个icmp报文之后 可以知道那条连接出了错
3.端口的作用?
各种进程复用tcp udp协议,而一个进程和一个端口对应,通过端口就可以知道 接收端收到的数据应该交付给那个进程。
4.udp收到有错误的数据 如何处理
简单的丢弃
5.运输层tcp或者udp首部 伪首部的作用?
伪首部 既不向下传递也不向上交付,只是用来 计算检验和
6.套接字
端口加ip地址组成了套接字
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南