深入学习 TCP/IP(三)

TCP首部字段详解

源端口 目的端口
序列号
确认号
头部长度 保留 ACK SYN FIN RST… 窗口大小
校验和 紧急指针

TCP报文头部没有源ip和目的ip,只有源端口和目的端口

序列号

TCP 是面向字节流的协议,通过 TCP 传输的字节流的每个字节都分配了序列号,序列号(Sequence number)指的是本报文段第一个字节的序列号。序列号保障里TCP的可靠性

序列号加上报文的长度,就可以确定传输的是哪一段数据。序列号是一个 32 位的无符号整数,达到 2^32-1 后循环到 0。

因为网络层(IP 层)不保证包的顺序,TCP 协议利用序列号来解决网络包乱序、重复的问题,以保证数据包以正确的顺序组装传递给上层应用。

例子:
如果发送方发送的是四个报文序列号分别是1、2、3、4,但到达接收方的顺序是 2、4、3、1,接收方就可以通过序列号的大小顺序组装出原始的数据

初始序列号( ISN)

在建立连接时,通信双方通过 SYN 报文交换彼此的 ISN,就是通过三次握手

初始序列号是通过源地址、目标地址、源端口、目标端口和随机因子通过 MD5 进行进行计算最后加上时间因子保证序列号不会重复

确认号( ACK)

TCP 使用确认号(Acknowledgment number, ACK)来告知对方下一个期望接收的序列号,小于此确认号的所有字节都已经收到。

Flags

SYN(Synchronize):用于发起连接数据包同步双方的初始序列号
ACK(Acknowledge):确认数据包
RST(Reset):这个标记用来强制断开连接,通常是之前建立的连接已经不在了、包不合法、或者实在无能为力处理
FIN(Finish):通知对方我发完了所有数据,准备断开连接,后面我不会再发数据包给你了。
PSH(Push):告知对方这些数据包收到以后应该马上交给上层应用,不能缓存起来

窗口大小

窗口大小的"Window Size" 只有 16 位,可能 TCP 协议设计者们认为 16 位的窗口大小已经够用了,也就是最大窗口大小是 65535 字节(64KB)

可选项

MSS:最大段大小选项,是 TCP 允许的从对方接收的最大报文段
SACK:选择确认选项
Window Scale:窗口缩放选项

TCP三次握手中SYN,ACK,Seq三者的关系

SYN: 客户端发送给服务端, 服务端接受为1,知道要建立连接
这个时候客户端还会产生一个随机序列号Seq,来进行标识头部的标识

ACK: 服务端接受SYN和Seq, 会产生一个ACK确认码,ACK确认码为 Seq + len(传输的字符),
并且服务端也会产生一个随机的Seq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值