1. 复用和分用
2. 运输层端口
- 定义:
运输层服务访问点 TSAP,用来标志应用层的进程 - 作用:
用统一的方法
对 TCP/IP 体系的应用进程进行标志,使运行不同操作系统的计算机的应用进程能够互相通信 - 端口号
16位,如FTP用21,TELNET用23,SMTP用25,DNS用53,HTTP用80,SNMP用161 - 分类
分类原因:保证通信准确、高效,避免冲突
类别 | 端口范围 | 解释 |
---|---|---|
熟知端口 | 0~1023 | 一般固定分配给一些服务 |
注册端口 | 1024~49151 | 为没有熟知端口号的应用程序使用。使用这个范围的端口号必须在IANA 登记,以防止重复。 |
动态端口 | 49152~65535 | 留给客户进程选择暂时使用。通常由传输层协议自动赋予客户 |
3. UDP(用户数据报协议,User Datagram Protocol)
- 特点
非可靠传输,无连接
- 支持一对一,一对多,多对一,多对多通信
面向报文
,适合多媒体通信- 一次发送或交付一个
完整
的报文
- 首部
- 长度:8字节
- 组成:16位源端口号+16位目的端口号+16位UDP长度(
含首部长度,不仅仅指数据部分
)+16位UDP检查和(端口号+端口号+长度+检查和)
- 例子
一个UDP用户数据报的首部的16进制表示是:06 32 00 45 00 1C E2 17.则?
源端口号为 ,目的端口号为 ,用户数据报总长度为 字节,数据部分长度为 字节,因为熟知端口69是目的端口,故应是从客户端发送给服务器,服务器程序是TFTP - 伪首部作用
计算检验和
4. TCP(传输控制协议,Transmission Control Protocol)
- 特点:
可靠交付,面向连接
使用确认机制来检查数据是否安全和完整的到达全双工
数据可在同一时间双向流动,而广播和多播不能用于TCP点对点
(一对一)面向字节流
(“流”(stream)指的是流入或流出进程的字节序列):
虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流
从这个流中提取适当的长度来创建报文段的分组
,然后将它们发送到网络上
接收TCP则接收报文段,从中提取数据,若没有按序到达还要将它们排序,并将它们作为字节流交付
给应用程序
- 注意:
- TCP 连接是一条虚连接而不是一条真正的物理连接\
- TCP 根据对方给出的窗口值和当前网络拥塞的程度,来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的,每次都是一个完整报文)
- TCP报文段的首部
长度:固定首部为20字节
,还有长度可变的选项和填充
5. TCP的数据编号与确认
TCP可靠的传输是由于使用了序号和确认
TCP协议是面向字节的。TCP将所要传送的整个报文看成是一个个字节组成的数据流,并使每一个字节对应于一个序号
。
步骤:
- 在连接建立时,双方要
商定初始序号
- 发送端
TCP每次发送的报文段的首部中的序号字段—-报文段中的数据部分的第一个字节的序号
- 接收端
接收端返回的确认序号是已收到的数据的最高序号加1
。也就是说,确认序号—-接收端期望下次收到的数据中的第一个数据字节的序号。
例子:
主机A向主机B连续发送了两个TCP报文段,其序号分别是70和100,则?
第一个报文段携带了 30 字节的数据
主机B收到第一个报文段后发回的确认中的确认号应该是 100 .
如果B收到第2个报文段后发回的确认中的确认号是180,则A发送的第2个报文段中的数据有 80 个字节
如果A发送的第一个报文段丢失了,但第二个报文段到达了B,B在第二个报文段到达后向A发送确认,则确认号应为 70
6. TCP的拥塞控制算法
慢开始门限状态变量ssthresh
:
- 当 cwnd < ssthresh 时,使用慢开始算法。
- 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
- 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
慢开始算法
逐步增大
发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理
1. 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值
2. 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值
注意:是每收到一个队新报文段的确认就对拥塞窗口加1的结果就是 :经过一个传输轮次,拥塞窗口 cwnd 就加倍
,两者是因果关系,并不矛盾
拥塞避免
目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕
- 让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd
加 1,而不是加倍
,使拥塞窗口 cwnd 按线性规律缓慢增长 - 只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的
一半
(但不能小于2) - 然后把拥塞窗口
cwnd 重新设置为 1
,执行慢开始算法
快重传
- 接收方:
每收到一个失序的报文段后就立即发出重复确认 - 发送方:
只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段 - 目的:
让发送方及早知道有报文段没有到达接收方,可更早地重传丢失的报文段
快恢复
- 当发送端收到连续三个重复的确认时,就执行
“乘法减小”
算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法
- 拥塞窗口
cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半
后的数值,然后开始执行拥塞避免算法
(“加法增大”),使拥塞窗口缓慢地线性增大