TCP协议入门

TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议…

以太网协议解决的是相同子网络内的计算机与计算机连接,IP协议解决的是不同子网络之间的连接,而TCP协议解决的则是应用程序与应用程序之间的连接。

TCP数据包的编号(SEQ)

一个包1400字节,那么一次性发送大量数据,就必须分成多个包。比如,一个 10MB 的文件,需要发送7100多个包。

发送的时候,TCP 协议为每个包编号(sequence number,简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包,也可以知道丢失的是哪一个包。

TCP数据包的组装

收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。

对于应用程序来说,不用关心数据通信的细节。除非线路异常,收到的总是完整的数据。应用程序需要的数据放在 TCP 数据包里面,有自己的格式(比如 HTTP 协议)。

操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。

总结:操作系统组装数据包、应用程序得到TCP的数据包体(如http请求)

TCP协议的三次握手

TCP协议的传输图

由图可知,TCP协议的连接需要三次握手。那么接下来解释两个问题:
① 三次握手具体在干什么?
② 直觉上来讲两次握手即可,为什么需要三次握手?

拿我们平时与人打招呼为例(问题一):
A: 吃了么?
B: 吃了,你上洗手间了么?
C: 上了。

上面是一个成功的TCP协议的内容,但也会存在异常情况,如:
A: 吃了么?
B: 上过洗手间了。
或者:
A: 吃了么?
B: 吃了,你上洗手间了么?
C: 我也吃了。

tip: 吃饭与上洗手间其实就是双方发送给对方的一个随机码,用来判断对方是不是答非所问。

拿古人写书信来说(问题二):
A: 写信问 “吃了么?”
(由于交通不便,这封信过了两年才送到B的手里。而在此期间,A早已忘了这茬儿)
B: 回信说 “吃了,你上洗手间了么?”
A: 这B有病啊,写的什么破信。从此与有病的B断了来往

总结: 如果只有两次通信的话,小B就只能陷入到无果的等待中。

四次挥手(客户端与服务端都可以主动发起关闭请求)

客户端:我要跟你分手,你的东西我都给你了(潜台词是“我的东西你还没有给我”)
服务端:我知道你想跟我分手,你还有一些东西在我这里,我正在打包,你注意听快递电话
服务器:包裹我已寄出,从此你我一别两宽,各生欢喜
客户端:hehe…

叶思玄 wechat
如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!