服务器收到这个消息后,就会把x+1作为ack结果,也就是返回的消息,在返回的消息中还给回客户端一个seq为y,同样的,这个y也是一个序号 。那么此时服务器就处于SYN_RCVD也就是接收到了消息的状态 。
继续 , 当客户端收到了服务器的回信后,知道这个连接已经通知服务器建立了,于是客户端把服务器端传过来的seq再加1作为ack应答给服务器,并且设置当前状态为ESTABLISHED,也就是建交成功,当服务器收到结果,一计算seq和ack没问题,那么服务器也设置为建交成功,可以传递数据了 。
这就是三次握手 。那为啥要有seq和ack呢?我直接喊一声,你答应一声,然后我再喊一声不就完事了么,非要加一加一干啥啊 。
嗯~这是为了记录当前的包是从哪开始的,你想像一下,在马路上跑的车有很多 , 有的车可能跑丢了,或者跑到别的国家了,压根不回来了,你咋整?所以TCP每发一个包都会记录一下,也就是递增1 , 你的seq和ack是要属于本次请求要求递增的包序号才算是属于本次建交的应答和响应 。
那么接下来就要开始传输数据了 , 应用层把HTTP数据包都准备好了,已经迫不及待要出发了,那么到了TCP这一层后,TCP会往这个包里加点东西:
文章插图
TCP会在应用层的HTTP包的基础上再加上TCP头,这里面包含了源端口号和目标端口号,有了端口号,我们就可以确定目标端口号从而找到目标应用,当信息返回的时候还会用到源端口号 , 这个我们后面再说 。
第三层/网络层:5号楼2单元101?网络层提供路由和寻址的能力 , 由于在TCP/IP协议族中,网络层的能力由IP协议来实现 , 所以又称为网络层又可以叫做IP层 。
但是网络层可不仅仅只有IP协议,还有比如ICMP(互联网控制消息协议)、IGMP(互联网组管理协议)、BGP(边界网关协议)、RIP(路由信息协议)、OSPF(开放式最短路径优先协议)、RARP(逆地址解析协议)等等 。我们简单了解下就可了 。
还是说回IP协议 , IP的主要任务其实很简单 , 就是根据源主机和目的主机的地址来传递数据 。当数据包到了三层之后,就会把源主机和目的主机的IP地址再加入到数据包中传给第二层 。
文章插图
而这一层的IP头,形象的比喻一下的话 , 就像是我们所在小区的楼牌号,有了楼牌号我们就能找到具体的人 。在互联网中,有了IP才可以找到具体是哪一台机器 。
当然,我们仅仅只知道楼牌号还不行,还得知道是哪个省市区的,北京的某某一小区和南京的某某小区,极大的可能会有同一个楼牌号,这肯定不行 。
所以我们就得来到下一层,也就是链路层来解决省市区的问题了 。
第二层/链路层:跳一跳链路层的主要作用是在局域网中专职处理介质的争用与冲突问题 。换句话说,就是我到了这个小区 , 要把快递给谁的问题 。而链路层的协议其实也不少,其中还有不少大家耳熟能详的协议,比如GPRS,Wi-Fi都是链路层协议,当然还有很多 , 有兴趣大家可以自行了解 。
链路层也可以叫做MAC层,MAC的全称叫做Medium Access Control,媒体访问控制,它要控制啥呢?其实就是控制数据发送的顺序和目标 , 谁先发,谁后发 , 谁来接收谁来发送的问题 , 不能搞乱了 。
当数据传递到MAC层后,MAC层会再加上一个MAC头,这里有源MAC地址和目标MAC地址:
文章插图
按理来说?。?到这后面就是一片坦途的到达目标服务器了,但是数据包的旅程其实才刚刚开始 。
当数据包出了网关之后,也就是出了我们的小区,你的小区会告诉这个数据包下一个小区要去哪,一个小区一个小区的跳啊跳,最终才会到达我们的目的地,那你可能会问,我直接让我的小区告诉我直接要到哪个小区不行么 , 为啥只能一个一个的跳来跳去的呢,嗯……因为全世界的小区数量太大,你的小区记不了那么多 。
第一层/物理层:世界的基石到了物理层,实际上就脱离了软件层面,是实实在在的可以接触到的电子设备了 , 比如光纤,同轴电缆,双绞线等等 , 嗯……它们是干啥的我都不知道,我也不告诉你 。
到了物理层后,数据最终会到达服务器,然后再反过来经历刚才的阶段,层层解开数据包,获取当前层所需要的信息,最终定位到目标应用的端口号,此时 , 我们包的旅程才算是真正的完成了 。
推荐阅读
- 用 VS Code 搞 Qt6:信号、槽,以及QObject
- React动画实现方案之 Framer Motion,让你的页面“自己”动起来
- “元芳,你怎么看”这句话当时是怎么火起来的
- 元芳你怎么看怎么幽默回复(神回复系列搞笑评论)
- “-”、“_”怎么打出来(怎么打出来的字有颜色)
- 一横“_” 电脑上怎么打(电脑中横杠怎么打)
- 用昇腾AI护航“井下安全”
- 两种方法 我的世界怎么附魔(我的世界怎么搞附魔)
- 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!
- MySQL 全局锁、表级锁、行级锁,你搞清楚了吗?