简简科技:TCP挥手过程及原理,「网络传输」一文搞懂
「网络传输」一文搞懂TCP挥手过程及原理
文章图片
阿里云云栖号
1583200890背景
和女朋友异地恋一年多 , 为了保持感情我提议每天晚上视频聊天一次 。
从好上开始 , 到现在 , 一年多也算坚持下来了 。
问题
有时候聊天的过程中 , 我的网络或者她的网络可能会不好 , 视频就会卡住 , 听不到对方的声音 , 过一会儿之后才会恢复 。
中间双方可能就要不断的确认网络是否恢复 , 但是有时候会:
她:“你可以听到了吗?”我:“可以了 , 你呢?”、她:“喂喂 , 你可以听到了吗?”我:“可以了 , 我可以听到了 , 你呢?”她:“你可以听到了吗?”.....这种情况很蛋疼 , 那么怎样才能找一个简单的办法 , 让两个人都确认自己可以听到对方的声音 , 对方也可以听到自己的声音呢?
注:以下情节纯属虚构
方案
TCP建立连接为什么是三次握手 , 而不是两次或四次?
TCP , 名为传输控制协议 , 是一种可靠的传输层协议 , IP协议号为6 。
顺便说一句 , 原则上任何数据传输都无法确保绝对可靠 , 三次握手只是确保可靠的基本需要 。
举个日常例子 , 打电话时我们对话如下:
对应为客户端与服务器之间的通信:
于是有了如下对话:
我:1+1等于几?
她:2,2+2等于几?
我:4
首先两个人约定协议
1.感觉网络情况不对的时候 , 任何一方都可以发起询问
2.任何情况下 , 若发起询问后5秒还没收到回复 , 则认为网络不通
3.网络不通的情况下等1min路由器之后再发起询问
对于我而言 , 发起“1+1等于几”的询问后
若5s内没有收到回复 , 则认为网络不通若收到回复 , 则我确认①我能听到她的消息②她能听到我的消息 , 然后回复她的问题的答案对于她而言 , 当感觉网络情况不对的时候
若没有收到我的询问 , 则她发起询问若收到“1+1等于几” , 则她确认①她可以听到我的消息 , 然后回复我的问题的答案和她的问题“2 , 2+2等于几”若5s内没有收到我的回复“4” , 则她确认②我听不见她的消息若5s内收到了我的回复“4” , 则她确认②我可以听见她的消息这样 , 如果上面的对话得以完成 , 就证明双方都可以确认自己可以听到对方的声音 , 对方也可以听到自己的声音!
这个故事可以解释TCP为什么要三次握手吗...囧
关于四次挥手
先由客户端向服务器端发送一个FIN , 请求关闭数据传输 。
当服务器接收到客户端的FIN时 , 向客户端发送一个ACK , 其中ack的值等于FIN+SEQ
然后服务器向客户端发送一个FIN , 告诉客户端应用程序关闭 。
当客户端收到服务器端的FIN是 , 回复一个ACK给服务器端 。 其中ack的值等于FIN+SEQ
为什么要4次挥手?
确保数据能够完整传输 。
当被动方收到主动方的FIN报文通知时 , 它仅仅表示主动方没有数据再发送给被动方了 。
但未必被动方所有的数据都完整的发送给了主动方 , 所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后 ,
再发送FIN报文给主动方 , 告诉主动方同意关闭连接 , 所以这里的ACK报文和FIN报文多数情况下都是分开发送的 。
一、TCP报文格式
TCP报文格式图:
上图中有几个字段需要重点介绍下:
(1)序号:Seq序号 , 占32位 , 用来标识从TCP源端向目的端发送的字节流 , 发起方发送数据时对此进行标记 。
(2)确认序号:Ack序号 , 占32位 , 只有ACK标志位为1时 , 确认序号字段才有效 , Ack=Seq+1 。
(3)标志位:共6个 , 即URG、ACK、PSH、RST、SYN、FIN等 , 具体含义如下:
(A)URG:紧急指针(urgentpointer)有效 。
推荐阅读
- 「定焦爱科技」3拯救低电量焦虑症,超大电池搭配超快闪充,续航出色的iQOO
- #科技小李#小屏爱好者嗨起来,4.7寸新iPhone确认四月发布,价格是大亮点!,原创
- 中国网科技@撤出液晶面板生产,三星将关闭两座工厂
- #即科技#107国赞同票作废!,想“加入”联合国?中国使用一票否决
- 【腾讯科技】全球应用市场第一季度大爆发:花费达234亿美元创纪录 时长增20%
- 即科技■决定权掌握在中国手,?联合国五常将变六常?此国获美俄一致力挺
- [笔记本电脑]乙辰科技正式发布首款WiFi6新品:北斗II号分布式无线路由器
- 『极速聊科技』目前仅剩10余人,暴风集团:员工持续大量流失
- 【科技生活快报】普京:已与欧佩克和美国就石油价格下跌问题进行讨论
- 「科技小数据」消费信贷的客户呈现出年轻化的趋势,新消费崛起