HCIA05-传输层

一、传输层概述

  传输层定义了主机应用之间端到端的连通性。传输层中最常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol)。

  传输层提供端到端的连接(会话之间)

  网络层提供点到点的连接(节点之间)

二、端口(Port)

  根据不同的端口可以区分不同的协议。

  0~1023 属于公认端口/知名端口(给一些重要的协议使用的端口)
  1024~49151属于注册端口/登记端口(应用注册使用的端口)
  49152~65535属于私有端口/动态端口(主机/客户端使用的端口)

  端口是根据需求自行更改的

  可以通过更改端口可以让非信任用户访问不到应用

  如FTP的端口默认为21,修改端口为9999,让非信任用户访问不到FTP服务器

 

  客户端(source port 49152~65535)
  服务器(source port 0~49152)
 
案例:
  假设登录FTP服务器1.0.0.1报错,有以下思路进行故障排查:
    1.检查FTP服务器是否在线。ping 1.0.0.1
    2.如果在线扫描端口是否开放。可以使用终端软件的telnet命令,加一个空格和端口号就会连接这个端口,主要看两种情况:“Could not  connect”无法连接,即端口未开放;“Connection established”建立连接,即这个端口开放了。
    
注意:端口对应了一种应用协议,真正提供服务的是服务器

三、传输层协议概述

协议 备注
TCP
Transmission control protocol 传输控制协议
可靠的、面向连接的协议
传输效率低,类似于打电话
UDP
User datagram protocol 用户数据报协议
不可靠、无连接的服务
传输效率高,类似于群聊
  TCP在通信前需要建立关系来确认之间状态:
  UDP在通信前不需要建立关系来确认之间的状态:
  TCP与UDP数据包结构对比:

四、TCP协议

  TCP协议可靠但是效率低

  TCP协议建立三次握手

    每次建立TCP连接都必然且至少会有三个数据包与之相关。

    涉及标志位SYN,ACK

  第一次握手:客户端发送SYN同步位标志和序列号给服务端并且进入SYN_SENT状态(序列号的值随机,公式表示为seq=j)

  第二次握手:服务端收到后回复一组ACK确认位标志和确认号表示收到连接建立请求(确认号的值为序列号+1,公式表示为ack=j+1),同时发送一组SYN同步位标志和序列号给客户端并进入SYN_RECV状态(序列号同样随机,公式表示为seq=k,此时的标志位ctl=syn,ack)

  第三次握手:客户端收到SYN+ACK数据包,同时发送确认包给服务端,此时双方进入established状态,连接建立(ack=k+1,ctl=ack)。

  TCP会话的确认

    TCP数据包中只有第一个包没有确认号。

    通过一个数据包的seq和data大小能确认下一个包的ack,同样通过下一个包的确认号就能确认一个数据包的大小。

    如图所示,假设第一次握手seq=1,数据大小是9字节。

    第二次握手的ack=10,这个ack有两层含义:一是第一次握手的seq+data=10,二是告诉客户端第三次握手seq希望是10。

    第三次握手seq=10,ack=21,其含义与第二次握手一致。

    对于数据包的确认,逐个确认会消耗资源,因此推出滑动窗口机制,只对部分进行确认。在短时内收到大量tcp数据包时,只对部分数据包和最后一个数据包进行确认,通过则表示已确认全部。其中必须有最后一个数据包,否则不会传输剩下的数据包。

  TCP会话的拥塞和流量控制

    根据窗口机制来控制网络拥塞(网络拥塞,主机接收服务器的数据不过来,服务器接收主机的请求不过来,可以根据窗口大小来调整)

    win的通俗含义其实就是告诉对方一次可发送的最多数据包数,比如win=3就是最多一次三个数据包,但是最多不是一定发满这个数值,可能在它之下。

    假如发送速度比处理速度快时,服务器会及时调整窗口数,比如图中的win=1的确认包。

  TCP会话断开四次挥手

    涉及ack,fin

    第一次挥手:A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。

    第二次挥手:B收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段。

    第三次挥手:当B数据传输完毕后,B发出连接释放报文段(FIN = 1,ACK = 1,序号seq = w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A 的最后确认。

    第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态。

  为什么A在TIME-WAIT状态必须等待2MSL(最大报文生存时间)的时间?

    1.保证A发送的最后一个ACK报文段能够到达B,保证A、B正常进入CLOSED状态。

      这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,B超时重传FIN+ACK报文段,A能2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,同时重启2MSL计数器,2MSL时间后A和B进入CLOSE状态,如果A在TIME-WAIT状态时接收到B的FIN+ACK报文段之后向B发出确认报文段,而不再确认B是否收到立即进入CLOSED状态,如若B并没有正常收到A 的确认报文段,则B无法正正常进入到CLOSED状态。

    2.防止“已经失效的连接请求报文段”出现在本连接中。

      A在发送完最后一个ACK报文段并经过2MSL,会使本次连接持续时间内所有产生的报文段消失,保证在下一次新连接中不会出现旧连接遗留的请求报文段。

    PS:四次挥手原理与三次握手几乎相同,但注意建立连接一定且至少有三次握手包,但是断开连接不一定是四次握手包(比如直接拔电源)。

五、UDP协议

  用户数据报协议

 

六、TCP与UDP的对比

传输控制协议TCP
用户数据报协议UDP
面向连接
无连接
可靠传输
尽力而为的传输
支持流控及窗口机制
无流控及窗口机制
仅支持点对点通信
支持任意通信方式(点对点,点对多点)
多用于注重数据的完整性
不要求数据的完整性,开销小

 

posted @ 2020-12-25 15:39  zhiyDevQAQ  阅读(131)  评论(0)    收藏  举报