在学习 tcp 连接之前,还要学习一下 tcp 头部格式。因为 tcp 连接建立,需要用 tcp 包来交换和管理数据,下面看一下 tcp头部格式。
tcp 头部里每个字段都为管理 tcp 连接和控制数据流起了重要作用。
16 位端口号:告知主机该报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。
进行 tcp 通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号。所有知名服务使用的端口号都定义在/etc/services 文件中。
32 位序号(sequence number):一次 tcp 通信(从 tcp 连接建立到断开)过程中个传输方向上的字节流的每个字节的编号。
32 位确认号(acknowledgement number):用作对另一方发送来的 tcp 报文段的响应其值是收到的 tcp 报文段的序号值加1。
4 位头部长度(header length):标识该 tcp 头部有多少个 32bit ( 4 byte 因为最大能表示 15 ,所以 tcp头部最长是 60 byte。
6 位标志位包含如下几项:
urg 标志,表示紧急指针是否有效。
ack 标志,表示确认号是否有效,一般称携带 ack 标志的 tcp 报文段为“确认报文段”。
psh 标志,提示接收端应用程序应该立即从 tcp 接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会直停留在tcp 接收缓冲区中)。
rst 标志,表示要求对方重新建立连接,一般称携带 rst 标志的 tcp 报文段为“复位报文段”。
syn 标志,表示请求建立 个连接,一般称携带 syn 标志的 tcp 报文段为“同步报文段”。fin 标志,表示通知对方本端要关闭连接了,一般称携带fin 标志的 tcp 报文段为“结束报文段”。
16 位窗口大小(window size):是 tcp 流量控制的一个手段。这里说的窗口,指的是接收通告窗口( receiver window,rwnd)。它告诉对方本端的 tcp 接收缓冲区还能容纳多少字节的数据,这样方就可以控制发送数据的速度。
16 位校验和(tcp checksum):由发送端填充,接收端对 tcp 报文段执行 crc 算法,以检验 tcp 报文段在传输过程中是否损坏。注意,这个校验不仅包括 tcp 头部,也包括数据部分。这也是 tcp 可靠传输的一个重要保障。
16 位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为“紧急偏移”。tcp 的紧急指针是发送端向接收端发送紧急数据的方法。
综上,你需要注意如下几点:
tcp 的包是没有 ip 地址的,那是 ip 层上的事,但是有源端口和目的端口。
一个tcp 连接需要四元组( src_ip,src_port,dst_ip,dst_port )来表示是同一个连接 准确说是五元组,还有一个是协议但因为这里只是强调 tcp 协议,所以,只说四元组。
sequence number 是包的序号,用来解决网络包乱序(reordering )问题。
acknowledgement number 就是 ack ,用于确认收到,用来解决不丢包的问题。
window advertised window ,也就是著名 的滑动窗口 sliding window ),用于解决流量控制问题。
tcp flag ,也就是包的类型,主要是用于操控 tcp 的状态机的。
TogetherROS Bot相机驱动方法
电话录音系统—1路、2路、4路、8路、16路电话录音系统8路
PLC编程系统的时间中断存在的问题和解决方案
工艺参数对微沟槽缺陷形成的影响并改进微沟槽缺陷
华为员工思想统一、凝聚力强大、一步步走向全世界的原因
TCP头部格式是什么
芯片缺货导致多家车企宣布停工
[图文]“特富龙”致癌风险上调一级
机房远程维护解决方案,无人值守机房依旧安全稳固
欧莱雅的微型可穿戴设备可让用户确定何时应该注意紫外线照射
Google的创始人辞去了Alphabet的首席执行官兼总裁的职务
什么是TD-SCDMA
中国OLED面板企业正在占据柔性OLED面板市场的份额
内网渗透中最常见的十种漏洞分析总结
澳大利亚税务局将寻求国际合作以解决躲避加密货币收入缴税的问题
苏岭风电项目转入建设与运行并存阶段,首台风机顺利并网发电
SDChain联盟正式开放国际首个真正采用区块链保证物联网
如何制作RGBLED背光
安帝科技:学十四五规划和2035年远景目标纲要,看网络安全产业发展蓝图
节省90%开发成本,涂鸦OEM App方案助力客户10分钟打造品牌专属App