计算机网络——传输层(TCP\UDP)

目录

 

传输层两个协议 

TCP(Transmission Control Protocol , 传输控制协议)协议

UDP(User Data Protocol,用户数据报协议)协议

UDP首部

TCP报文段的格式

主机和网页的交互过程

TCP如何实现可靠性传输TCP协议如何实现流量控制TCP协议如何避免网络拥塞

可靠性传输工作原理——停止等待协议

可靠通信的实现

连续ARQ的机制是

累计确认

TCP协议如何实现流量控制

TCP协议如何避免网络拥塞

慢开始和避免拥塞

慢开始算法

快恢复是什么

TCP三次握手建立连接

TCP四次挥手断开连接


传输层两个协议 

  • TCP(Transmission Control Protocol , 传输控制协议)协议

需要将传输文件分段,传输建立会话,流量控制,是可靠传输

TCP概述:

1.TCP是面向连接的传输层协议

2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点

3.TCP提供可靠交付的服务

4.TCP提供全双工通信

5.面向字节流

  • UDP(User Data Protocol,用户数据报协议)协议

一个数据包就能完成数据通信,不需要分段不需要建立对话不需要流量控制,是不可靠控制

UDP特点:

1.无连接:发送数据前不用建立连接

2.使用尽最大努力交付,即不保证可靠交付,同时也不适用拥塞控制

3.面向报文,UDP没有拥塞控制,适合多媒体通信

4.支持一对一、一对多、多对一和多对多的交互通信

5.首部开销小,只有8字节

UDP首部

TCP报文段的格式

序号:数据段的第一个字节在整段中的位置是多少

确认号:给对方提示发第几个字节,也就是下图中203的接下来的数据

标志位

URG = 1时,会无视在TCP缓存中的位置,优先传输过去

ACK = 1时,确认号才起作用

SYN = 1时,说明这个包是一个请求建立连接的包

PSH = 1时,在传输完成后放在目的地的TCP缓存中的最前排

RST = 1时,代表异常中断,会结束后面的通信

FIN = 1时,代表通信完成,需要释放,一般出现在末尾的包

窗口大小:指发送端的tcp缓存大小要和接收端的tcp缓存大小对应

紧急指针:只有当标志URG = 1时才起作用,紧急指针为50时,说明TCP数据部分的1~50个字节为紧急数据

 

主机和网页的交互过程

 

TCP如何实现可靠性传输TCP协议如何实现流量控制TCP协议如何避免网络拥塞

可靠性传输工作原理——停止等待协议

 确认丢失和确认迟到都会重传

总结:只要没收到确认,就重传

可靠通信的实现

使用上述的确认和重传机制,就可以在不可靠传输网络上实现可靠的通信,这种可靠传输协议通常被称为自动重传请求ARQ(Automatic Repeat reQuest),ARQ表明重传请求是自动进行的

停止等待的优点是简单,但是缺点是信道利用率太低 

解决方法有:连续ARQ(流水线传输)和累计确认 

连续ARQ的机制是

1》先发送5个包(为什么是5个包,是因为发送窗口是5),然后等待第一个的确认

2》第一个得到确认后从TCP缓存中去掉,接着发送第六个包,等待第二个确认,以此类推

累计确认

累计确认是累积到一定数量的包后一次性确认,当收到的包不是规定顺序的时候,就只确认正确序列的最后一个,错误包以及以后的都得不到确认。

还有一种方法是滑动窗口技术,类似于上面两种方法的结合体

TCP协议如何实现流量控制

A窗口向B窗口发送数据

B窗口的缓存大小是10,发给A窗口的包为ack=0,rwnd=10,建立连接,然后A窗口开始发送数据,当接收到一定数据后,例如收到了前四个数据,B窗口再次发送 ack = 5,rwnd = 8,此时接收A从第五个数据开始的几个数据,此时B窗口的TCP缓存中已经有相当一部分数据了,可以让程序读出这些数据,这时B向A发送的包为 ack = 14 ,rwnd = 0,rwnd表示发送窗口为 0 ,停止A发送数据,然后B在这个阶段读取缓存中的数据,这样就达到了流量控制的效果

TCP协议如何避免网络拥塞

出现拥塞的条件:对资源需求的总和 > 可用资源

拥塞控制是一个全局性的过程,涉及到所有主机和路由器

慢开始和避免拥塞

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

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

  • 只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去
  • 只要网络中出现拥塞,拥塞窗口就减小一些,以减小注入到网络中的分组数

慢开始算法

慢开始算法是加倍cwnd

慢开始门限ssthresh的用法如下:

  • 当cwnd < ssthresh,使用慢开始算法
  • 当cwnd > ssthresh,停止使用慢开始算法而改用拥塞避免算法
  • 当cwnd = ssthresh,既可以使用慢开始算法也可以使用拥塞避免算法

拥塞避免算法的思路是让cwnd缓慢增大,即每经过一个往返时间RTT就把拥塞窗口cwnd+1,而不是加倍

ps:无论在慢开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞,就要把慢开始门限ssthresh设置为出现拥塞时的cwnd的一半,但不能小于2,然后把cwnd设置为1,执行慢开始算法。

 

慢开始和拥塞避免算法实例

快恢复是什么

快恢复是发生在传输过程中丢包进行快速重传之后的,如果只是单个的意外丢包,这时候没必要进行慢开始和拥塞避免,这样会浪费资源和时间,快重传之后,门限变为传送窗口大小,窗口大小变为一半,直接进行拥塞避免,当出现大面积时才执行上面介绍的步骤,门限变为窗口一半,窗口变为1.

 

TCP三次握手建立连接

  • 第一次握手(SYN=1, seq=x),发送完毕后,客户端进入 SYN_SEND 状态

  • 第二次握手(SYN=1, ACK=1, seq=y, ack=x+1), 发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ack=y+1),发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手,即可以开始数据传输。

TCP四次挥手断开连接

  • 第一次挥手(FIN=1,seq=a),发送完毕后,客户端进入 FIN_WAIT_1 状态

  • 第二次挥手(ACK=1,ack=a+1),发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态

  • 第三次挥手(FIN=1,seq=b),发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

  • 第四次挥手(ACK=1,ack=b+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值