注:内容整理自B站UP主《牛兮兮的书》的系列视频,视频讲解非常好。
TCP:面向连接的传输层协议,采用客户端(发出请求)+服务端(回应请求)的工作模式。
客户端监听一个通信端口,服务端监听一个通信端口,建立一个双向的连接。
客户端:数据的发送方/数据的接收方
服务端:数据的接收方/数据的发送方
端口号:标志数据来源于那个应用程序
TCP报文的固定长度与IP报文一致,都是20字节
源端口(source port):16 bits,标识数据发送端的应用层程序
目的端口(destination port):16 bits,标识数据接收方的应用层程序。
取值范围为0~65535
序列号(sequence port):32 bits ,标识数据发送方所发出数据的编号,序列号以字节为单位。是一个的随机数字
确认号(acknowledge port):32 bits,标识数据接受方期望下次收到的数据编号(数据接受方表示之前的数据都接受到了,数据发送方,你下次得发这个标号得数据了)。
报头长度(header length):4 bits,标识TCP报头的长度,单位是4字节。所以说TCP的报头的长度范围为20~60字节。
保留位(reserverd): 3 bits
标志位(flag):9 bits
bit 1: nonce:详见RFC 3450,同样是关于ECN相关的一个参数
bit 2: congestion window reduce(CWR),拥塞窗口减小,CWR =1表示链路拥塞,会减少TCP窗口。
bit 3:ECN-Echo(ECE):explicit congestion Notification显式拥塞报告
bit 4:Urgent (URG):紧急,标志高优先级的紧急数据,URG=1表示报文中有紧急数据,需要优先处理,并且URG=1,TCP报头中的紧急指针字段才会生效
bit 5:ACK(acknowledgement):确认,表示TCP报头中的确认号是否有效,ACK = 1代表有效。
bit 6:Push (PSH):推送,PSH=1,表示需要把接收到的数据推送给上层应用程序,而不是缓存起来
bit 7:Reset(RST):重置,复位,RST = 1
bit 8:Syn,同步,表示请求建立连接,并同步双方的序列号
bit 9:Fin ,FIN = 1,表示数据已经发送完毕,请求关闭连接。
窗口大小(windows size):16 bits,用于表示数据接收方当前可以接收的最大的数据量,单位是字节。窗口大小其实代表了数据接受方当前缓存池的大小,告知发送方不要一次发送过量的数据。这个大小会根据传输的拥塞情况进行调整
检验核(checksum):16 bit,用于TCP头部+应用层数据的差错校验
紧急指针(urgent point):16 bit,表明紧急数据的字节数,与序列号搭配使用,单位是字节
可选项&填充数(option & padding):用于协商一些其他的参数。最常用的协商MSS(最大分段长度)。
可靠的传输层协议,丢数重传(以字节为单位)
建立连接之后,可以统一回复,不用每次都回复。
数据链路层的负载:网络层+传输层+应用层
MTU : max transition unit最大传输单元
含义:网络设备一次能够发送出去的最大数据报文(最大数据帧),即二层链路的最大负载
MTU的构成 =网络层报头(通常是20字节) + 传输层报头(通常是20字节) + 应用层数据(最大1460字节)。所以MTU的数值为1500字节,如果数据包超过了1500字节,就要拆分。这也意味着应用程数据的最大数据量为1460字节,这个数值称为MSS。
如何控制一个数据包中应用层数据的最大值
使用TCP的一个参数MSS来解决。(只有传输层使用TCP时才有这个参数)
MSS:max segment size 最大分段大小,最大分段长度。系统的模式就是1460字节
假设应用层程序要发送5000字节的数据,交给了传输层,那么TCP就要根据MSS的数值进行分段发送。
第一个段:1460字节
第二个段:1460字节
第三个段:1460字节
第四个段:640字节(完成)
注意区分:TCP协议对应用层数据的分段 & IP协议对数据包的分片
TCP分段:TCP根据MSS的大小对应用层数据进行拆分,分段后的数据依次封装TCP报头和IP报头,是一个完整的IP报文
IP分片:依据IP MTU参数对三层数据包进行切片,切片的报文不是一个完整的IP报文。
模式MTU = IP MTU = IPV6 MTU
TCP端口号的取值范围0 ~ 65535
公认著名端口(wellkownn port):0~1023,主要代表一些通用的著名的应用层协议。
HTTP:TCP = 60
HTTPS : TCP= 443
FTP:文本传输协议 TCP = 21 和20
Telnet协议:TCP =23 远程管理端口
SSH :TCP = 22 加密远程管理端口
SMTP:TCP =25
POP3: TCP = 110
IMAP : TCP = 143
注册端口(register port):1024 ~ 49151,应用程序端口,需要在icann进行注册
动态和私有端口(dynamic and private port): 49152 ~65535,一般用作随机端口