tcp和ip协议中三次握手,因为客户端和服务端之间请求,当客户端发起请求的时候都会给出序列号,而在服务端接收到信号之后会给出确认号(之前的序列号+1),并且给出自己生成的另外一个序列号。
在三次握手的过程中一直都是按照双方生成的序列号来通讯的。每次握手的时候确认号都是在对方的给出的序列号上加一,并且将自己的序列号返回出去。总之,自己不在自己的序列号上加,只在别人的序列号上加,加了的就叫做确认号。
然后有时候网络比较忙,对方没有回复,可能会再发一次请求。但是可能存在你发过去之后对方的就发信心过来了,存在是否需要重新传的问题。解决办法就是在有效时间中不去重传。这就是重传计时器的作用
而在tcp报文中序列号是32bit,确认号也是32位的。
确认号+序列号+首部长度 +保留位+ 标志位
标志位:
1.紧急位URG,标记为1时,表示这个报文是紧急的,为0表示无效,这个位和紧急指针有关(为0时无效)
2.确认号有效否ACK,如果为0表示无效,纵观三次握手中,只有第一次发起请求的时候才为0,因为没有确认号可以确认
- 推送位???push
- RES重置位,一般不使用,因为有风险
- 同步位为1,表示序列号开始有效,为0表示无效,所以SYN为1,ACK为0,表示第一次握手。但是之后SYN就都为0了,有点容易搞错。所以服务端和客户端发出请求地第一次都是SYN为1
- FIN结束位 因为在网络上,断开是需要两边都断开,服务端向客户端地断开/客户端向服务端断开,所以一方向另外一方发出断开请求的时候,另外一方除了需要确认断开请求,还需要发送自己的断开请求
16位窗口大小,其记录的是双方的接受能力,比如一次接受5个,但是发15个报文,后面10个就丢失了。因为窗口大小会变化(滑动窗口),所以需要不断确认,并且协商用最小的。只要在窗口大小合适,报文就不会丢失。但是窗口大小是什么呢?在计算机中能够处理的能力是有限的,多余的报文会被储存在计算机的某块内存中,也就是内核的缓存区---没能够处理的报文都放在这里,一一等着处理,也就是网络缓存区(不只是接受,还有发送也需要缓存 )。
16位TCP校验和 校验整个TCP报文
16位紧急指针
选项
数据
主机到主机
- 主机将要请求的进程包装成TCP首部,说明白原进程地址和目标进程地址(保证进程间通信)
- IP首部,说明这个是哪个主机来的,要去哪里(保证网络间通信)
- 原mac地址,和目标mac地址 交换机(保证本地通信)
- 前导码,标记即将传导报文