计算机网络 重点 ——TCP协议与UDP协议

**

计算机网络——TCP协议与UDP协议

**

传输层是整个TCP/IP层次模型的一个重点。而传输层两个协议也自然是非常重要

UDP协议

​ UDP放在前面是因为UDP协议相对来说知识量少一些。

User datagram protocol–用户数据报协议 :用于传输可靠性要求不高,数据量小的数据。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。无连接,尽最大努力的数据传输服务其数据传输的单位使用用户数据报。

  • 特点
1.无连接
2.尽最大努力交付
3.面向报文
4.无拥塞控制
5.支持一对一、一对多、多对一和多对多的交互通信
6.首部开销小
  • 首部
首部占8字节
用户数据报有两个字段,数据字段和首部字段。

1)源端口	 源端口号,需要对方回信时使用,不需要可以全0
2)目的端口	目的端口号,在终点交付报文时必须使用
3)长度	  UDP用户数据报的长度,最小位8(仅有首部)
4)检验和	 检验UDP用户数据报在传输过程是否有错

在这里插入图片描述

TCP协议

Transmission control protocol – 传输控制协议 :传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据, 面向连接,其数据传输单位是报文段。

  • 特点
1.面向连接;通信之前必须建立连接
2.每一条TCP连接只能是点对点的(一对一);
3.提供可靠交付的服务;通过TCP连接传输的数据,无差错,不丢失,不重复。
4.提供全双工通信;
5.面向字节流。虽然程序和TCP交互是一次一个数据块,
	但是Tcp把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
  • 报文结构

在这里插入图片描述

1)源端口和目的端口各占2字节

2)序号 4字节。

3)确认序号 4字节 
	上一个字段的序号是对数据的编号,所以确认序号是下一个期望接收的TCP分段号,
	相当于是对对方所发送的并且已经被本方所正确接受的分段的确认。仅当ACK标志为1时有效。
	确认号表示期望收到的下一个字节的序号

4)4位的报头长度(数据偏移)
	以32位(4字节)字长为单位,需要这个值是因为任选字段的长度是可变的。
	跟IP头部一样,以4字节为单位。最大是60个字节。不存在任选字段正常的报头长度是20字节。
	其实相当于给出数据在数据段中的开始位置。

5)保留位,6位,必须为0

6)标志位,占有6个比特位,他们中可以有多个为置为1,依次为:URG,ACK,PSH,RST,SYN,FIN。
	URG:该位为1说明表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并督促上层应用敢快处理这些数据。
	ACK:确认号有效
	PSH:接收方应尽快将这个报文交给应用层,叫做push。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。
	RST:连接复位,复位因主机奔溃或其他原因而出现的错误连接,也可以用于拒绝非法的分段或拒绝连接请求,这个用处还是比较多的
	SYN:是一个同步序号,通常与ACK合用用来建立连接。也就是常说的三次握手
	FIN:既然有建立连接那么必然有拆除连接,这个字段表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

7)紧急指针

8)窗口大小 
	TCP的流量控制由连接的每一端通过声明的窗口大小来提供。
	窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。
	这是一个16 bit字段,因而窗口大小最大为65535字节。

9)检验和  用于对分段首部和数据进行校验。正常情况下为一定为0
网络拥塞

计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。

  • 试探发送数据

慢开始 + 拥塞避免算法

在这里插入图片描述

为了避免之间传输大量数据引起网络拥塞;因此先探测,由小到大来增加发送窗口。

1)满开始为指数性增长,到达阈值之后,使用拥塞避免,即线性增长(加法增大)

2)直达阻塞,这时会将阈值置为当前窗口的一半,然后采用“乘法减小”,从新阈值开始,使用“加法增大”传输

在这里插入图片描述

重传机制
  • 超时重传
1)超时重传即数据因网络拥塞或者丢失原因,
导致接收方没收到数据,则无法为发送方返回确认
2)超过这段时间,发送方重新发送这条数据,等待接收方的确认
  • 快重传
    在这里插入图片描述
三次握手

三次握手

1)第一次握手:
客户端将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器端,
客户端进入SYN_SENT状态,等待服务器端确认。

(2)第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYNACK都置为1,
ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,
服务器端进入SYN_RCVD状态。

(3)第三次握手:
客户端收到确认后,检查ack是否为x+1ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,
并将该数据包发送给服务器端,服务器端检查ack是否为y+1ACK是否为1,如果正确则连接建立成功,
客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
四次挥手

四次挥手

1)第一次挥手:
客户端将标志位FIN=1,seq=u,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。
意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,
则不必急着关闭连接,可以继续发送数据。

(2)第二次挥手:
服务器端收到FIN后,先发送ack=u+1,告诉客户端,你的请求我收到了,但是我还没准备好,
请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。

(3)第三次挥手:
当服务器端确定数据已发送完成,则向客户端发送FIN=1,seq=w报文,告诉客户端,好了,
我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

(4)第四次挥手:
客户端收到FIN=1报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,
所以发送ack=w+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。
服务器端收到ACK后,就知道可以断开连接了。
客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。
最终完成了四次握手。
  • 为什么是三次握手和四次挥手

  • 为什么第四次挥手客户端要等待2MSL之后才到Close状态

TCP如何保证数据的可靠性
  • 检验和
  • 序列号
  • 确认应答机制(ACK)
  • 超时重传机制 ---- 快重传
  • 连接管理机制
  • 拥塞控制
  • 流量控制

有兴趣的关注我的公众号,一起学习交流啊
在这里插入图片描述

下一篇 》Http协议


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值