自己动手实现TCP/IP--tcp协议通信(一)

一、介绍
tcp/ip协议栈要深入理解,最好的方式就是自己写一遍基础的协议,这里以传输层的tcp为例介绍实现过程
tcp特点
提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议,建立连接通道,数据大小无限制速度慢,但是可靠性高

二、整体框架
自己动手实现TCP/IP--tcp协议通信(一)_第1张图片
此图片 来源于网络
要实现tcp通信,必须实现tcp本身传输层,以及下面的网络层ip以及数据链路

三、tcp协议帧框架
自己动手实现TCP/IP--tcp协议通信(一)_第2张图片
图片来源网络

四、各层协议格式

1、数据链路层
以太网头
在这里插入图片描述
2、网络层
ip头
自己动手实现TCP/IP--tcp协议通信(一)_第3张图片
3、传输层
tcp头
自己动手实现TCP/IP--tcp协议通信(一)_第4张图片
4、arp
自己动手实现TCP/IP--tcp协议通信(一)_第5张图片
5、ICMP
在这里插入图片描述

6、ping
在这里插入图片描述

五、通信机制
1、通信的建立和关闭机制
建立通信
自己动手实现TCP/IP--tcp协议通信(一)_第6张图片
此图片来源网络
(1)客户端请求连接,发送一条报文syn=1,seq=J,J是一个随机数,然后进入等待连接状态
(2)服务端收到请求以后,确认收到请求发一个条报文,syn=1,ack=1,seq=J+1,seq=K,然后进入等待连接状态
(3)客户端收到确认请求后,发送一条报文ACK=1,ack=K+1,进入监听状态,服务端收到报文后,也进入监听状态,然后就可以收发数据了

这个过程简称三次握手

关闭通信
自己动手实现TCP/IP--tcp协议通信(一)_第7张图片
此图片来源网络

(1)客户端请求断开客户端到服务端的发送,发送一条报文fin=M,M是一个随机数,然后进入等待断开状态
(2)服务端收到断开请求以后,确认收到请求发一个条报文,ack=M+1,然后进入等待端口状态
(3)服务端请求断开服务端到客户端的发送,发送一条报文fin=N,进入最后应答状态
(4)客户端收到服务端请求断开请求后,确认收到请求,发送一条报文ACK=1,ack=N+1,进入等待超时状态,服务端收到后会关闭连接状态

这个过程简称四次挥手

2、慢启动机制
原因:tcp如果直接满负荷发送会导致路由器过热,从而导致丢包,所以有了慢启动机制
原理:发送方一次发10个包等接收方确认消息,然后再继续发送;接收方默认每2个包会回复一个确认消息;在没有丢包的情况下会逐渐增加发送包的大小,否则减小发送包的大小
确认消息内容:
(1)期待要收到下一个数据包的编号
(2)接收方的接收窗口的剩余容量
自己动手实现TCP/IP--tcp协议通信(一)_第8张图片
此图片来源网络

3、数据丢包处理
自己动手实现TCP/IP--tcp协议通信(一)_第9张图片此图片来源于网络

发送方发送数据包以后,接收方会回复一下一个数据包的编号,如果中间丢了一包数据,那么接收方回复的编号将不会发发生变化
丢包确认:
(1)收到三次相同的ack
(2)超时没有收到ack
触发重新发送丢失的数据包

待更新

你可能感兴趣的:(TCP/IP,C语言,网络,tcpip,tcp,c语言)