本文主要是介绍TCP三次握手-普通话版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:UDP和TCP
总拿UDP和TCP进行比较,为什么呢?因为UDP是不可靠传输,数据过来后把数据分成小份后就发送出去了,我不管你们收没收到哈,反正我是发过去了,你能收到多少就看这网速行不行,带宽够不够了,但是TCP不一样啊,哪个包你没收到啊,我给你重新传一下啊,可不能丢啊
TCP为了实现这个可靠性的传输,怎么办呢,咱们商量一个协议吧,彼此都维持一个序列号吧(seq),你传到哪次了,告诉我,我传到哪次告诉你,中间如果你哪次没有收到,按照序列号给你重新传一下就ok了
开始对话
客户端:哎呀,服务端大哥,我要和你建立个链接(SYN)呀,我的初始序列号(seq)是x,
服务端,哎呦,老弟,我确认收到你的请求(ACK)了, 我愿意和你建立链接(SYN)啊, 我的初始序列号(seq)是y, 我看你给我发送的序列号是x, 那我期望下次收到(ack)你回复的序列号是 x+1,
客户端:哎呀大哥,我收到你的回复(ACK)了, 这是我的第二次请求,序列号(seq)是x+1, 我希望下次收到你回复的序列号是 y+1
客户端维护的序列号是x, 服务端维护的序列号是y, 按照相互对话的次数依次+1 ,例如,客户端第一次请求序列号是x, 第二次 x+1,第三次x+2......以此类推
为什么三次握手而不是两次握手
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
个人记录学习,如有错误,望指教!
这篇关于TCP三次握手-普通话版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!