Bootstrap

网络协议栈简单设计(tcp)

网络协议栈简单设计(tcp)

接着这篇文章写的

TCP相对于Udp,分为两个部分:连接(三次握手、四次挥手)、交互(数据传输)

三次握手

tcp包结构体定义

依照tcp包头字段定义就行:

20230204154214

注意,tcp协议头不像udp有包长字段,因此TCP在建立连接时,客户端和服务端会协商设置每个报文的最大长度mss,比如send(buff)中buff的数据长度为2k,mss设置为0.5k,那么这个数据将会被切割成4个包进行传输

mtu和mss的区别:mtu处于数据链路层,最小传输单元,通过设置为1500,而mss处于传输层

// TCP协议头
struct tcphdr {
	unsigned short sport;  // 源目端口
	unsigned short dport;
    // 初始值:随机值,最大值4G,越界了可从1开始。
    // 序列号是字节的数量,不是包的数量,比如客户端发送的第一个tcp包是512个字节,第一个包的序列号是0,发送的第二个包的序列号就是51
;