作者:热爱生活的小胖胖
链接:https://www.zhihu.com/question/39541968/answer/2353101443
来源:知乎
著作权归作者所有 。商业转载请联系作者获得授权,非商业转载请注明出处 。
你是一台电脑,你的名字叫 A
文章插图
文章插图
这就是物理层、数据链路层、网络层这三层所做的事情 。站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了 。
文章插图
文章插图
文章插图
所以,你需要把通信的进程区分开来,于是就给每个进程分配一个数字编号,你给它起了一个响亮的名字:端口号 。
文章插图
文章插图
然后你在要发送的数据包上,增加了传输层的头部,源端口号与目标端口号 。
文章插图
文章插图
OK,这样你将原本主机到主机的通信,升级为了进程和进程之间的通信 。你没有意识到,你不知不觉实现了UDP 协议!(当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过)就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题 。
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
图片过于清晰,就不再文字解释了 。当 A 不断发送数据包时,已发送的最后一个序号就往右移动,直到碰到了窗口的上边界,此时 A 就无法继续发包,达到了流量控制 。
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
不知道你现在再看下面这句话,是否能理解:TCP 是面向连接的、可靠的、基于字节流的传输层通信协议面向连接、可靠,这两个词通过上面的讲述很容易理解,那什么叫做基于字节流呢?很简单,TCP 在建立连接时,需要告诉对方 MSS(最大报文段大小) 。也就是说,如果要发送的数据很大,在 TCP 层是需要按照 MSS 来切割成一个个的TCP 报文段 的 。切割的时候我才不管你原来的数据表示什么意思,需要在哪里断句啥的,我就把它当成一串毫无意义的字节,在我想要切割的地方咔嚓就来一刀,标上序号,只要接收方再根据这个序号拼成最终想要的完整数据就行了 。在我 TCP 传输这里,我就把它当做一个个的字节,也就是基于字节流的含义了 。
推荐阅读
- 鸡蛋羹的家常做法,详细步骤图解
- 怎样做葱油花卷,葱油花卷的家常做法图解-
- 家常做法,简单 家常疙瘩汤的做法图解,疙瘩汤的做法
- 小乐言|分手后小乐言与女友再续前缘,被忽略也没放弃,终于让他追回来了
- 汤唯|看了汤唯的无修生图,才终于明白了“不整容”的重要性
- 西线无战事|终于盼来一部恢宏大气的电影佳作,刚上线就被观众打出了9分!
- 思维导图解读昆虫记
- 马頔|《披荆斩棘的哥哥2》:听了潘玮柏的分析,终于明白马頔为何一战打出身价
- 美国恐怖故事|时隔一年,这部重口味美剧终于回归,可以看了
- 曲家瑞|她的人设终于崩了!