TCP/IP协议:TCP协议
传输控制协议(Transmission Control Protocol, TCP) 最终目的是为数据提供的端到端传输。
WechatIMG37.jpeg端是终端,点是结点,网络层是实现结点(路由器)的通信。终端可以是PC,笔记本,手机。结点一般表示路由器
20字节
源端口(16位 Source Port): 用来传输数据包的端口
目的端口(16位 Destination Port ) : 数据包将要发送到的端口
序号(32位 Sequence Number): 这个数字用来表示一个TCP片段,这个域用来保证数据流中的部分没有缺失。
确认号(32位 Acknowledgment Number):这个数字是通信中希望从另外一个设备得到的下一个数据包的序号
标记(Flags): URG ACK PSH RST SYN FIN 表示所传输的TCP数据包的类型
窗口大小(Windows Size): TCP 接收者缓冲的字节大小
校验和(Checksum):用来保证TCP头和数据的内容在抵达目的地时的完整性
紧急指针(Urgent Pointer):如果设置了URG位,这个域将被检查作为额外的指令,告诉CPU从数据包的哪里开始读取数据。
选项(Options):各种可选的域,可以在TCP数据包中进行指定。
TCP端口
- 所有TCP通信都会使用源端口和目的端口。
- 为了能够将数据传输到远程服务器或设备的特定应用中去,TCP数据包必须知道远程服务所监听的端口。
在使用TCP进行通信的时候,我们有65535个端口可供使用,并通常将这些端口分成两个部分。
- 1~1023是标准端口组(忽略掉被预留的0),特定服务会用到这些通常位于标准端口分组中的标准端口。
- 1024~65535是临时端口组(尽量一些操作系统对此有不同的定义),当一个服务想在任意时间使用端口进行通信的时候,
现代操作系统都会随机地选择一个源端
。
所有基于TCP的通信都以相同的方式工作: 选择一个随机的源端口与一个已知的目的端口进行通信。在发出初始数据包之后,远程设备就会与源设备使用建立起的端口进行通信。
TCP三次握手
- 保证源主机确认目的主机在线,并可以进行通信
- 让源主机检查是否正在监听视图尝试区去连接的端口
- 允许源主机向接收者发送它的起始序列号,让两台主机可以将数据包流保持有序
TCP三次握手分为3个步骤。
第一步,主动发起通信的设备向目标发送一个TCP数据包。初始数据包除了底层协议头外不包括任何数据。这个数据包会设置SYN标志(设为1),并用到初始序列号。
第二步,目标回复一个设置了SYN和ACK标志(同时设置)和包含它的初始序列号的数据包。
第三步,主机A向主机B发送仅仅设置了ACK标志的数据包。这个过程之后,双方设备有了开始正常通信所需的信息。
第一步中 SYN为1 序列号为X ACK号为0 发送的包叫SYN包
第二步中 SYN为1 ACK为1 序列号为Y,ACK号为X+1 发送的包叫SYN/ACK包
第三步中 ACK为1 序列号为X+1 ACK号为Y+1 发送的包叫ACK包(此时SYN也有值,比上一次SYN号+1)
个人理解
SYN 标志 是一个标志位 占一个位
ACK标志 和 SYN标志可以共存。因为它们占用的是不同的位
序列号 是一个32位的数字 确认号 是一个32位的数字
确认号和序列号也可以共存。