由于之前面试阿里的时候面了这个问题,发现对于协议理解的还是不够深入,所以今天再次学习一下。
TCP头部:20字节的固定首部,包括源端口、目的端口、序号、确认号、数据偏移、保留数据、窗口、校验和、紧急指针、选项、填充等等。
图片说明

ACK: TCP协议规定,ACK=1时建立链接有效,也规定建立后所有发送的报文的ACK必须为1。
SYN: 在连接建立用来同步序号。当SYN=1而ACK=0时,表明这是一个请求连接报文,若同意,则在响应报文种使SYN=1和ACK=1,因此,SYN置1表示这是一个连接请求或者连接接受报文。
FIN:用来释放一个连接,当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放链接。

序号:占4字节。范围时0到2^32-1。如果本报文段的第一个字节序号为301,最后一个字节的序号为400。则下一个报文段序号应该是401,

三次握手过程
图片说明
客户端:发出连接请求SYN=1.ACK=0,TCP规定SYN=1时不能携带数据,但是需要消耗一个序号,因此声明自己的序号为seq=x
服务端:回复SYN=1,ACK=1,seq=y,ack=x+1.
客户端:回复ACK=1,seq=x+1,ack=y+1;

那么为什么还需要三次握手呢?
用一个简答的理解就是。
第一次发送。
服务端:对方能发送信息,我能接受信息。
第二次发送:
客户端:我能发送信息,接受信息,对方能发送信息、对方能接受信息。
第三次发送:
服务端:对方能发送信息,对方能接收信息,我能发送信息,我能接收信息。

为什么要传SYN和ACK
SYN是TCP/IP建立建立连接的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个消息,服务器使用SYN-ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应,这样才能建立起可靠连接,数据才可以在客户机和服务器之间传递。

四次挥手的过程
客户端:发送FIN,请求关闭客户端到服务器的数据传送
服务器:收到FIN,发回一个ACK,确认序号为收到序号+1。和SYN一样,一个FIN占用一个序号
服务器:关闭客户端连接发送一个FIN给客户端。
客户端:发送ACK报文确认,并将确认序号设置为收到序号+1

为什么要四次挥手呢
因为对方收到释放连接的通知后,可能还有数据没有发送完毕,等待发送完毕之后再发出信号,那么对方确认后再完全关闭TCP连接。

TCP如何保证可靠性的呢
首先将应用数据切割成TCP认为最适合发送的数据块。然后对每一个包进行编号,接收方对数据包排序,把有序数据传送给应用层。
1 检验和:TCP将保持它首部和数据的检验和。是一个端到端的检验和,目的是检测数据再传输过程中
是否发生了变化,如果检验和有差错,TCP将丢弃这个报文或者放弃取人。
2 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端到端能接纳的数据。当对方来不及处理发送方的数据,能提示发送方降低发送方大的速率,防止包丢失。TCP使用的流量协议是可变大小的滑动协议
3 拥塞控制:当网络拥塞时,减少数据的发送。
4 ARQ协议:为了实现可靠传输的,基本原理是发完一个分组就停止发送,等待对方确认。等收到确认后再发下一个分组。
5 超时重传:当TCP发出一个额段后,它启动一个定时器,等待目的端确认收到这个报文端,如果不能及时收到确认,将重发这个报文端。

为什么需要拥塞控制呢
因为在网络中,网络资源是共享的,若对网络中某一资源超过了该资源所能提供的可用部分,网络的性能就会变差。这种情况叫拥塞,拥塞控制就是为了防止过多的数据注入网络中,这样就可以使网络中的路由器或链路不过载。保证网络资源的公平性。
四种拥塞控制算法:慢开始拥塞避免快重传,和快回复
慢开始:当主机发送数据时,先探测一下,从小到大的发送,增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
2,拥塞避免:让拥塞窗口缓慢增大,每经过一个往返时间就加1.
3 快重传和快恢复

ARP协议
是为了将ip地址转换为MAC地址。
原理和结构
图片说明

总长度为64字节,操作码请求为1,响应为2.