5.1 传输层功能
1. TCP/IP协议集
2. 传输层的两个协议
在TCP/IP协议栈,传输层有两个协议TCP和UDP。
TCP
:需要将要传输的文件分段 传输 建立会话 可靠传输 流量控制 如:qq传文件 访问网站
UDP
:一个数据包就能够完成数据通信 不分段 不需要建立会话 不需要流量控制 不可靠传输。 如:屏幕广播 多播 广播 qq聊天
Notes:
查看会话 netstat -n
查看建立会话的进程 netstat -nb
3. 传输层协议和应用层协议之间的关系
常见的应用层协议使用的端口
http=TCP+80
https=TCP+443
RDP=TCP+3389
ftp=TCP+21
共享文件夹=TCP+445
SMTP=TCP+25
POP3=TCP+110
telnet=TCP+23
SQL=TCP+1433
DNS=UDP+53
4. 应用层协议和服务之间的关系
服务运行后在TCP或UDP的端口侦听客户端请求
客户端使用IP地址定位服务器 使用目标端口 定位服务
可以在服务器网卡上设置只开放必要的端口 实现服务器网络安全
Notes:
netstat -an 查看服务侦听的端口
telnet 192.168.80.100 3389 测试远程计算机某个端口是否打开
5. 传输层功能
6. 传输层协议和网络层协议的主要区别
7. 传输层端口
(1)传输层的端口
(2)TCP端口
端口用一个 16 位端口号进行标志
端口号只具有本地
意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。
(3)三类端口
熟知端口
,数值一般为 0~1023。
FTP:21
TELNET:23
SMTP:25
DNS:53
HTTP:80
https:443
RDP:3389
登记端口号
,数值为1024~49151
客户端口号
,数值为49152~65535
5.2 传输层协议UDP和TCP
5.2.1 UDP
1. UDP特点
2. UDP报文段格式
3. UDP检验和
5.2.2 TCP
1. TCP特点
2. TCP面向字节流的过程
3. TCP的连接
4. TCP报文段格式
- 源端口和目的端口字段——各占 2 字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。
- 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
- 数据偏移——占 4 bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit 字(4 字节为计算单位)。
- 保留字段——占 6 bit,保留为今后使用,但目前应置为 0。
- 紧急比特 URG —— 当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
- 确认比特 ACK —— 只有当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。
- 推送比特 PSH(Push)接收方 TCP 收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付.
- 复位比特 RST (Reset) —— 当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
- 终止比特 FIN (FINal) —— 用来释放一个连接。当FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
- 窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以控制对方的发送窗口的上限。
- 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
- 紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
- 选项字段 —— 长度可变。TCP 首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
5.3 TCP如何实现可靠传输
1. TCP实现可靠传输机制
可靠传输的工作原理 —— 停止等待协议。
2. 优化1.中的TCP实现可靠传输机制
3. TCP 可靠通信的具体实现
5.4 TCP如何实现流量控制
1. 利用滑动窗口实现流量控制
流量控制
就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
利用滑动窗口机制
可以很方便地在 TCP 连接上实现流量控制。
5.5 TCP协议如何避免网络拥塞
5.5.1 拥塞控制的一般原理
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
5.5.2 拥塞控制算法
慢开始和拥塞避免算法 && 快重传和快恢复算法
1. 慢开始和拥塞避免算法
(1)defs
发送方维护一个叫做 拥塞窗口cwnd
的状态变量,其值取决于网络的拥塞程度,并且动态变化。
发送方控制拥塞窗口的原则是:
只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。
判断出现网络拥塞的依据:
没有按时收到应当到达的确认报文(即发生重传)。
接收端窗口: rwnd ;发送端窗口: swnd
(2)慢开始和拥塞避免算法的实现举例
1.当TCP连接进行初始化时,将拥塞窗口置为1。
2.设置慢开始门限状态变量ssthresh
慢开始门限 ssthresh 的用法如下:
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
3.慢开始算法思路
是让拥塞窗口 cwnd 按指数增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 做一个平方,使拥塞窗口 cwnd 按指数规律增长。
4.拥塞避免算法的思路
是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,使拥塞窗口 cwnd 按线性规律缓慢增长。
注意:
“拥塞避免”并非指完全能够避免了拥塞。 “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
5.无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞
(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。
6.然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。
( 这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。)
2. 快重传和快恢复算法
(1) defs
快重传算法
首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。
当发送端收到连续三个重复的确认时
,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半,但拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
(2)快重传和快恢复算法的举例
5.6 TCP的传输连接管理
TCP建立连接
TCP释放连接