传输层
计算机网络笔记,视频地址:https://www.bilibili.com/video/av9876107
文章目录
1. 传输层功能
传输层为相互通信的应用进程提供了逻辑通信 找到对应端口
此外,传输层还需要对收到的报文进行差错检测
2. OSI参考模型和TCP/IP协议栈
2.1 传输层协议和应用层协议的关系
常见应用层协议使用的端口:
- 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
3. 服务和应用层协议之间的关系
传输层的数据包携带目标端口信息,不同服务根据端口匹配侦听
计算机上可能安装不同服务,但是接受的数据访问服务端需要匹配端口,这里涉及到了网络安全问题,避免恶意数据入侵服务
服务使用TCP或UDP端口侦听客户端请求
客户端使用IP地址定位服务器,使用目标端口定位服务
可以在服务器网卡上设置只开放必要的端口从而实现网络安全
3.1 如何查看服务侦听的端口
netstat -a
:查看侦听的端口
telnet 192.168.80.100 3389
:测试到远程计算机192.168.80.100的3389端口是否打开
netstat -ano
:查看端口占用情况
tasklist | findstr "80"
:查看80端口被哪些应用占用
3.2 计算机中端口
需要注意的是,端口号具有本地意义,同一个计算机上不同应用的端口号不同,但是不同计算机中的端口号没有联系,即不同计算机对应相同端口号表示的意义不同
端口可以分为三类:
- 熟知端口:0-1023
- 登记端口:1024-49151
- 客户端口:49152-65535
4 UDP(User Data Protocol,用户数据报协议)
UDP面向无连接的传输,不需要建立会话,非可靠传输,不需要流量控制
一个数据包就可以完成通信
UDP使用尽最大努力交付,不保证可靠交付,也不使用拥塞控制
UDP是面向报文的,适合多媒体通信要求
UDP支持一对一,一对多和多对多的交互通信
UDP首部开销小,只有八个字节
UDP首部格式:
伪首部中的UDP长度表示的是IP数据报的长度,首部中的长度表示UDP用户数据报的长度
计算过程如下:
1001 1001 0001 0011
+ 0000 1000 0110 1000
1010 0001 0111 1011
+ 1010 1011 0000 0011
1 0100 1100 0111 1110
进位 1
0100 1100 0111 1111
+ 0000 1110 0000 1011
0101 1010 1000 1010
+ 0000 0000 0001 0001
0101 1010 1001 1011
+ 0000 0000 0000 1111
0101 1010 1010 1010
+ 0000 0100 0011 1111
0101 1110 1110 1001
+ 0000 0000 0000 1101
0101 1110 1111 0110
+ 0000 0000 0000 1111
0101 1111 0000 0101
+ 0000 0000 0000 0000
0101 1111 0000 0101
+ 0101 0100 0100 0101
1011 0011 0100 1010
+ 0101 0011 0101 0100
1 0000 0110 1001 1110
进位 1
0000 0110 1001 1111
+ 0100 1001 0100 1110
0100 1111 1110 1101
+ 0100 0111 0000 0000
1001 0110 1101 1101
取反
0110 1001 0010 0010
应用:域名解析,QQ聊天、屏幕广播/多播
5 TCP协议(Transmission Control Protocol,传输控制协议)
TCP是面向连接的传输,需要建立会话,是可靠的传输,有流量控制
每条TCP连接都有两个端点,是点对点的连接,全双工通信,面向字节流
传输的文件需要分段传输
应用:大文件传输,邮件发送
5.1 TCP的连接
TCP连接的端点被称为套接字(socket),端口号拼接IP地址构成套接字
套接字 socket = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个套接字确定,例如
{socket1,socket2}={(IP1:port1),(IP2:port2)}
传输连接的三个阶段:建立连接、数据传送、连接释放
TCP连接的建立都是采用客户服务器的方式,即将主动发起连接建立的应用进程叫做客户(Client),将被动等待连接建立的应用进程叫做服务器(Server)
TCP连接需要三次握手,断开需要四次挥手
5.1.1 建立连接
三次握手
第一次握手:客户端发送syn报文请求到服务器,等待服务器确认,MSS表示最大数据包,seq表示序号,len表示数据长度;
第二次握手:服务器收到syn请求,向服务端发送一个确认报文ACK和一个请求连接报文SYN,WIN表示最大缓存;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
第三次握手是为了保证服务器SYN请求有效
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
5.1.2 释放连接
四次挥手
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手:客户端作为主动关闭方像服务器发送一个FIN报文申请断开,但是,此时客户端还可以接受数据
第二次挥手:服务器收到FIN包后,发送一个ACK给客户端,之后不再向客户端发送新的数据,但是如果已有数据在传输,会继续传输
第三次挥手:当服务端想客户端数据传输完成后,向客户端发送一个FIN断开报文
第四次挥手:客户端收到服务器的FIN报文之后, 向服务器发送ACK确认报文, 告诉服务器说我也收到了你的关闭请求了. 此时如果服务器收到了ACK报文,服务器就关闭了, 而客户端还要等待2MSL的时间之后才能关闭,如果2MSL内客户端未收到服务端重发的FIN就可以执行断开操作。
5.2 TCP报文段首部格式
TCP首部包括固定的20个字节和可变数据
-
序号:分段数据的第一个字节是整个数据的第几个字节
-
确认号:记录发送端下一个数据段的起始字节数,例如发送1234这个数据段,确认号应该是5
-
数据偏移:记录TCP报文段从第几个字节开始有数据
-
URG(urgent):urg标记为1表示有较高的优先级,即在传输数据的时候不需要排队,直接先传
-
ACK(acknowledgment):ACK是0表示确认号无效,ACK为1表示确认号有效
-
SYN:建立会话请求,在建立请求那个会话为1,建立好会话后就为0
-
PSH(push):PSH设为1表示优先级较高,数据先传
-
RST(resset):RST=1表示服务中断,拒绝后面数据的通信,重新建立连接
-
FIN(finally):FIN=1表示释放连接
-
窗口:缓存大小,接收端要告诉发送端最大接收缓存,发送端要告诉接收端最大发送缓存
-
紧急指针:只有在urg=1时起作用,指明了紧急传递数据包的字节结束为止
5.3 TCP如何实现可靠传输
这种可靠的传输协议被称为自动重传请求(Automatic Repeat reQuest, ARQ)
ARQ表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的部分
但是ARQ的信道利用率太低
为了解决信道利用率低的问题,可以采用流水线传输,即发送方连续发送多个分组,如下图所示
连续ARQ协议可以连续发送数据
如上图所示,发送窗口为5,表示发送端可以连续发送五个数据包,然后等待接收端返回确认,等到第一个数据包确认,发送窗口前移一位,类似滑动窗口,注意在没有接收到接收端确认时,发送窗口中的数据不能丢弃
为了进一步提高效率,不需要每一个数据包都发送确认,可以使用累积确认,例如发送三个数据包,最后一个数据包发送确认就默认前两个都已经确认。
TCP实现可靠传输
-
以字节为单位的滑动窗口技术
即规定发送窗口和接收窗口,窗口中的数据可以打包发送,在接收端返回确认后,发送窗口可以往后移,发送成功的数据可以丢弃
-
选择性确认(SACK)
在发送的包不连续时,接收端会发送选择性确认,让发送端重新发送缺失的部分
-
超时重传时间
TCP每发送一个报文段就设置一个计时器,只要计时器设置的重传时间到了还未收到确认,就重传这一段报文
超时重传时间略大于加权平均往返时间
5.4 TCP协议如何实现流量控制
发送端的窗口大小不能大于接收端
通过调整发送窗口和接受窗口的大小可以控制发送和接收的数据
当接收端缓存不足就需要缩小窗口,让可以处理缓存数据(将缓存数据发送给应用)
5.5 TCP协议如何避免网络堵塞
当对资源需求的总和大于可用资源就会出现资源拥塞情况
拥塞控制是一个全局性的过程,涉及到所有主机、所有路由器以及与降低网络传输性能有关的所有因素
可以看出,如果没有拥塞控制,可能使得传输量越大通过的数据量越少,更严重可能出现死锁情况,导致数据不能传输
5.5.1 慢开始和拥塞避免
发送方维持一个拥塞窗口(congestion window, cwnd)
发送方控制拥塞窗口的原则是:
- 只要没有出现拥塞,拥塞窗口就能再增大一些,以便发送更多数据出去
- 如果出现网络拥塞,拥塞窗口就适当减小,减少网络中的分组数
可以看出也是通过调节窗口的大小来控制流量
慢开始门限刚开始设置为16,之后线性增长而不是按照指数增长,当出现网络拥塞后,新的慢开始门限变为网络拥塞前拥塞窗口的一半,之后拥塞窗口从1开始重新安装指数增长