TCP 报文
TCP/IP 的运输层有两个主要协议:
- 用户数据报协议UDP (User Datagram Protocol)
- 传输控制协议TCP (Transmission Control Protocol)
- 两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元
- TPDU (Transport Protocol Data Unit)。
- TCP 传送的
数据单位协议 是TCP 报文段(segment)。 - UDP 传送的
数据单位协议 是 UDP 报文或用户数据报。
端口号(protocol port number)
-
在运输层使用协议端口号 (protocol portnumber),或通常简称为端口 (port)。 -
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完。 -
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。 -
-
TCP报文段分析
TCP报文首部的设计是经过一些简单模型改进演变位适合实际应用的处理模型,报文的设计考虑到并满足模型的功能需求,对应着存在着某些字段
ARQ协议(通信模型)
- ? 基本思想:
- ? 发送方一次可以发出多个分组。
- ? 使用
滑动窗口协议 控制发送方和接收方所能发送和接收的分组的数量和编号。 - ? 每收到一个确认,发送方就把
发送窗口 向前滑动。 - ? 接收方一般采用
累积确认 的方式。 - ? 采用
回退N(Go-Back-N)方法 进行重传。
累积确认
- ? 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
- ? 优点:容易实现,即使确认丢失也不必重传。
- ? 缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。
ARP协议和停止等待协议
ARQ协议从停止等待协议改进过来的
TCP 报文设计
- TCP报文段分为首部和数据部分
- 首部又分为固定部分和选项(变长部分)
- 固定部分占有明确的20Byte(160bit);(首部最大长度60Byte:480bit)
- 数据偏移(即首部长度)——占 4 位,它指出TCP 报文段(首部+数据部)的
数据起始处 (数据部分的起始处)距离 TCP 报文段的起始处 (首部起始处)有多远。“数据偏移”的单位是 32 位字(以4 字节为计算单位)。 - 确认号seq(4Byte:32bit)的有效性与ACK位(1位1bit)的关系
ack & ACK
- 确认号
ack (2Byte:16bit)(小写的ack) - 确认位
ACK (1位:1bit)
其他主题
三次握手
- 建立TCP连接过程中的报文不携带数据,数组字节流在在数据传送阶段的TCP报文才开始携带数据字节流
- 交换报文的过程中,相邻的报文的seq与ack存在一定的联系.(交叉联系)
报文中的seq(ack)之间倒是没有直接联系(但是如果两个相邻报文时统一台主机发出的(比如四次挥手的过程中的第2,3报文,ack将保持不变;而seq之间仍然相对独立)
- A 的TCP 向B 发出连接请求报文段,其首部中的同步位SYN = 1,并选择序号seq = x,表明传送数据时的第一个数据字节的序号是x。
- B 的TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应使SYN = 1,使
确认位ACK = 1,其确认号ack = x + 1,自己选择的序号seq = y。 - A 收到此报文段后向B给出确认,其ACK = 1,确认号ack = y + 1。A 的TCP 通知上层应用进程,连接已经建立。
- B 的TCP 收到主机A的确认后,也通知其上层应用进程:TCP 连接已经建立。
四次挥手
字段所占字节与位的混淆
wireShark分析报文(reserve+flags)
简略信息Info
不过如果将Reserved 一同算入标志位,那么将达到12位Flags!
需要注意的是,这里途中的data offset 字段所占的4位(4bit)是用以描述TCP报文首部的大小(4bit可以表示的最大值1111(即十进制的15));那么单位是什么?(既不是Byte,更不是bit,而是(4Byte)为单位);报文以4Byt位计量单位,所以首部最大为15*4Byte=60Byte(480bit)
-
即,描述首部长度信息的字段占了这个TCP报文段的首部空间的4个bit; -
计算机网络中有各种各样的协议,分析协议中的报文解构是重点内容
- 为了更好的记住各个字段在数据报(通常是分析数据报的首部,首部的设计包含着该类型协议所具备的所有功能)
- 记忆(m字节:8m位;n位:nbit)
- 比如:
- 1字节8位
- 2字节16位
- 3字节24位
- 4字节32位
- 8字节64位
- 16字节128位
- 20字节160位
- 60字节480位
- 半字节4位(4位4bit)
- 1位1bit
-
seq与ack字段
|