计算机网络基础知识1

TCP协议——传输控制协议

用途:主要用于网间传输的协议,分割处理报文并把结果包传到IP层,并接受处理IP曾传到的数据包。

1)TCP包头格式

在这里插入图片描述

源端口号和目标端口号:知道谁发的和发给谁的; 序号:编号是为了解决乱序问题;
确认序号:发出去的包应该有确认,没有收到就应该重新发送,直到送达;
状态位:SYN是发起一个连接、ACK是回复、RST是重新连接、FIN是结束连接;
窗口大小:TCP要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力,别发送的太快,撑死我,也别发的太慢,饿死我;

2)TCP的三次握手

A:你好B,我是A
B:你好A,我是B
A:你好B
在这里插入图片描述
时序图如下:
在这里插入图片描述
1、刚开始客户端和服务端都处于CLOSED状态,服务端先监听某个端口,处于LISTEN状态

2、客户端主动发起连接请求SYN=1,ACK=0,初始序号为x,之后处于SYN-SENT状态

3、服务端收到发起的连接请求,如果同意连接就返回SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y,之后处于SYN-RCVD状态

4、客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,确认号为 y+1,序号为 x+1。之后处于ESTABLISHED状态,因为它一发一收成功了;

5、服务端收到ACK的ACK之后,处于ESTABLISHED状态,因为它也一发一收了。

3)TCP的数据传输

在这里插入图片描述

4)TCP的四次挥手

A:B啊,我不想玩了
B:哦,你不想玩了啊,我知道
(此时A很可能是发送完最后的数据就准备不完了,不能在ACK的时候就关闭连接,此时B还没忙完自己的事情,还是可以发送数据的,称为半关闭状态)
B:A啊,好吧,那我也不玩了,拜拜
A:好的,拜拜
在这里插入图片描述
时序图如下:
在这里插入图片描述
1、A发送连接释放报文,FIN=1,就进入FIN_WAIT_1的状态
2、B收到之后发出确认,此时TCP连接处于CLOSE_WAIT(半关闭)状态,B能向A发送数据但是A不能向B发送数据
3、当B不再需要连接时,发送连接释放报文,FIN=1,就进入FIN_WAIT_2的状态
4、A收到后发出确认,进入TIME_WAIT状态,等待2MSL(最大报文存活时间)后释放连接
5、B收到A的确认后释放连接

四次挥手的原因:
客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入了CLOSE_WAIT状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。
TIME_WAIT
客户端接收到服务器的FIN报文后进入此状态,此时并不是直接进入CLOSED状态,还需要等待一个时间计时器设置的时间2MSL,原因:
1)确保最后一个确认报文能够到达。如果B没收到A发送的来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生。
2)等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

5)可靠传输

如何成为一个靠谱的协议?
TCP中为了保证顺序性,每一个包都有一个ID;建立连接的时候,会商定起始的ID是什么,然后按照ID一个个发送。采用**累计确认或者累计应答(cumulative acknowledgment)**的方式去保证不丢包;为了记录所有发送的包和接收的包,TCP也需要发送端和接收端分别都有缓存来保存这些记录。发送端的缓存里是按照包的ID一个个排列,根据处理的情况分成四个部分:
发送了并且已经确认的;
发送了并且尚未确认的;
没有发送,但是已经等待发送的;
没有发送,并且暂时还不会发送的;

TCP使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT,加权平均往返时间 RTTs 计算如下:
其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。
超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下:
其中 RTTd 为偏差的加权平均值。

6)TCP滑动窗口

在这里插入图片描述

7)TCP流量控制

8)TCP拥塞控制

在这里插入图片描述

TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。
为了便于讨论,做如下假设:
接收方有足够大的接收缓存,因此不会发生流量控制;
虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值