传输层

 

 

 

总结:链路层定义了主机的身份,即MAC地址,而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。因此传输层引入了tcp/UDP协议来解决这个问题,为了给每个应用程序标识身份。

1.传输层的功能?

l) 传输层提供应用进程之间的逻辑通信(即端到端的通信)

2) 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。

3) 传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP 数据报的首部,不检验数据部分是否出错。

4) 提供两种不同的传输协议,即面向连接的TCP 和无连接的UDP 。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)。

 

2.udp协议——其只在ip的数据报服务上增加了两个最基本的服务:复用和分用以及差错检测。其主要特点是:

 

 

 

 

 

 

3.Tcp协议——它主要解决传输的数据无差错、不丢失、不重复且有序。其中传输数据无差错是靠添加伪首部来实现,而不丢失则靠确认和重发机制,而不重复且有序靠的是序号机制。Tcp的主要特点是:

 

4..tcp的三次握手

第一步:客户机的TCP 首先向服务器的TCP 发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1 。另外,客户机会随机选择一个起始序号seq =x(连接请求报文不携带数据,但要消耗一个序号)。第二步:服务器的TCP 收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP 连接分配TCP 缓存和变量。在确认报文段中, SYN ACK 位都被置为1, 确认号字段的值为x+ 1, 并且服务器随机产生起始序号seq= y( 确认报文不携带数据,但也要消耗一个序号)。确认报文段同样不包含应用层数据。第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK 标志位被置1, 序号字段为x+ 1, 确认号字段ack=y+ 1 。该报文段可以携带数据,若不携带数据则不消耗序号。

 

5.Tcp的四次挥手

第一步:客户机打算关闭连接时,向其TCP 发送一个连接释放报文段,并停止发送数据,主动关闭TCP 连接,该报文段的FIN 标志位被置1, seq= u

第二步:服务器收到连接释放报文段后即发出确认,ACK标志位置为1,确认号是ack = u + 1, 而这个报文段自己的序号seqV。此时,从客户机到服务器这个方向的连接就释放了, TCP 连接处于半关闭状态。

第三步:若服务器已经没有要向客户机发送的数据,就通知TCP 释放连接,此时其发出FIN= 1 ACK标志位置为1,序号seqw,确认号是u+1的连接释放报文段。

第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中, ACK 字段被置为1, 确认号ack= w + 1, 序号seq= u + 1 。此时TCP 连接还未释放,必须经过时间等待计时器设置的时间2MSL A 才进入连接关闭状态。

 

6.Tcp拥塞控制的四种算法

    1. 满开始算法,指数增加
    2. 拥塞避免——到达了阔值,线性增加
    3. 快重传——当发送方连续收到三个重复的ACK 报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
    4. 快恢复——遇到网络拥塞,直接恢复到新的阔值,进行拥塞避免算法
    1. 为何不采用“三次握手“释放连接,且发送最后一次握手报文后要等待2MSL 的时间呢?

    原因有两个:

    1) 保证A 发送的最后一个确认报文段能够到达B 。如果A 不等待2MSL, A 返回的最后确认报文段丢失,则B 不能进入正常关闭状态,而A 此时已经关闭,也不可能再重传。

    2) A 在发送最后一个确认报文段后,再经过2MSL可保证本连接持续的时间内所产生的所有报文段从网络中消失。服务器结束TCP 连接的时间要比客户机早一些,因为客户机最后要等待2MSL 后才可进入CLOSED状态。

    1. 为什么不采用“两次握手”建立连接呢?

    因为如果采用二次握手,遇到了以下这种情况会消耗我们的系统资源。比如说a发送给b请求,b收到之后,返回确认,并开启了一条tcp连接,但这个确认丢了,于是a以为没有连接成功,继续发请求,b收到之后,以为又是一个新的连接,于是又开启了一个新连接,明明是同个请求,却生成了两个连接,浪费了我们的系统资源。

 

posted @ 2020-06-02 01:04  鹏达君  阅读(248)  评论(0编辑  收藏  举报