传输层

计算机网络笔记,视频地址: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每发送一个报文段就设置一个计时器,只要计时器设置的重传时间到了还未收到确认,就重传这一段报文

    超时重传时间略大于加权平均往返时间RTTsRTT_s

    RTTs=(1α)(RTTs)+α(RTT)旧的新的样本RTT_s=(1-\alpha)*(旧的RTT_s)+\alpha*(新的RTT样本)

5.4 TCP协议如何实现流量控制

发送端的窗口大小不能大于接收端

通过调整发送窗口和接受窗口的大小可以控制发送和接收的数据

当接收端缓存不足就需要缩小窗口,让可以处理缓存数据(将缓存数据发送给应用)

5.5 TCP协议如何避免网络堵塞

当对资源需求的总和大于可用资源就会出现资源拥塞情况

拥塞控制是一个全局性的过程,涉及到所有主机、所有路由器以及与降低网络传输性能有关的所有因素

在这里插入图片描述

可以看出,如果没有拥塞控制,可能使得传输量越大通过的数据量越少,更严重可能出现死锁情况,导致数据不能传输

5.5.1 慢开始和拥塞避免

发送方维持一个拥塞窗口(congestion window, cwnd)

发送方控制拥塞窗口的原则是:

  • 只要没有出现拥塞,拥塞窗口就能再增大一些,以便发送更多数据出去
  • 如果出现网络拥塞,拥塞窗口就适当减小,减少网络中的分组数

可以看出也是通过调节窗口的大小来控制流量
在这里插入图片描述

慢开始门限刚开始设置为16,之后线性增长而不是按照指数增长,当出现网络拥塞后,新的慢开始门限变为网络拥塞前拥塞窗口的一半,之后拥塞窗口从1开始重新安装指数增长

5.5.2 快重传和快回复

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章