一、介绍
tcp/ip协议栈要深入理解,最好的方式就是自己写一遍基础的协议,这里以传输层的tcp为例介绍实现过程
tcp特点
提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议,建立连接通道,数据大小无限制速度慢,但是可靠性高
二、整体框架
此图片 来源于网络
要实现tcp通信,必须实现tcp本身传输层,以及下面的网络层ip以及数据链路
三、tcp协议帧框架
图片来源网络
四、各层协议格式
1、数据链路层
以太网头
2、网络层
ip头
3、传输层
tcp头
4、arp
5、ICMP
6、ping
五、通信机制
1、通信的建立和关闭机制
建立通信
此图片来源网络
(1)客户端请求连接,发送一条报文syn=1,seq=J,J是一个随机数,然后进入等待连接状态
(2)服务端收到请求以后,确认收到请求发一个条报文,syn=1,ack=1,seq=J+1,seq=K,然后进入等待连接状态
(3)客户端收到确认请求后,发送一条报文ACK=1,ack=K+1,进入监听状态,服务端收到报文后,也进入监听状态,然后就可以收发数据了
这个过程简称三次握手
关闭通信
此图片来源网络
(1)客户端请求断开客户端到服务端的发送,发送一条报文fin=M,M是一个随机数,然后进入等待断开状态
(2)服务端收到断开请求以后,确认收到请求发一个条报文,ack=M+1,然后进入等待端口状态
(3)服务端请求断开服务端到客户端的发送,发送一条报文fin=N,进入最后应答状态
(4)客户端收到服务端请求断开请求后,确认收到请求,发送一条报文ACK=1,ack=N+1,进入等待超时状态,服务端收到后会关闭连接状态
这个过程简称四次挥手
2、慢启动机制
原因:tcp如果直接满负荷发送会导致路由器过热,从而导致丢包,所以有了慢启动机制
原理:发送方一次发10个包等接收方确认消息,然后再继续发送;接收方默认每2个包会回复一个确认消息;在没有丢包的情况下会逐渐增加发送包的大小,否则减小发送包的大小
确认消息内容:
(1)期待要收到下一个数据包的编号
(2)接收方的接收窗口的剩余容量
此图片来源网络
3、数据丢包处理
此图片来源于网络
发送方发送数据包以后,接收方会回复一下一个数据包的编号,如果中间丢了一包数据,那么接收方回复的编号将不会发发生变化
丢包确认:
(1)收到三次相同的ack
(2)超时没有收到ack
触发重新发送丢失的数据包
待更新