• 关于TCP三次握手的意义及其具体实现解释


    首先,最基本的三次操作方的说明如下:

    • 客户端向服务端发送请求;客户端 → 服务端
    • 服务端确认客户端发送到来的请求;服务端 → 客户端
    • 客户端确认服务端发送到来的确认。客户端 → 服务端

    最显浅的目的解释如下:

    • 第一次握手:“你”是不是在监听指定端口?
    • 第二次握手:“我”的确在监听某个端口,“你”可以跟我建立连接。
    • 第三次握手:“我”收到了“你”的回复了,“你”做好准备吧。

    要是认真思考过后,还不能理解上面的说法的话,你可能需要知道这些TCP协议实现的基本背景

    1. TCP是建立在IP协议之上的,而IP协议作为网络层协议,并不保证每个发送的消息,都能到达目的IP;
    2. 网络层协议不仅不保证每个数据能不能到达目标地址,而且并不保证你发送的顺序,会更目标收到的顺序相同;
    3. 服务端只是一个提供服务的个体,它跟客户端的关系是一对多。
    4. TCP是全双工的,a能到达b未必就是b能到达a。

    为什么TCP需要这样设计呢?

    1. 第一次握手的时候,TCP协议头中会携带它发送的序列号a(以及窗口大小等,不过这是题外话),以确保服务端没有回复的时候,它发出第二次(或者内容不一样)请求的时候,能够区别开;
    2. 第二次握手,服务端确认的同时,会携带上客户端发过来的序列号(准确来说,这个时候已经叫确认号了,值为a+1),以及自己的发送序列号b;(“我”只确认a这个序列号的请求,其他序号的有可能丢失,有可能其他原因没有收到的,“我”不管)
    3. 第三次,客户端会携带上服务端发过来的序列号(此时也应称为确认号,值为b+1),并且因为服务端刚才确认收到的是a数据,所以这次自己携带的序列号为a+1。
  • 相关阅读:
    Windows网络编程:多线程技术
    Windows网络编程:OSI七层模型
    Windows网络编程:WinSock模型
    Windows网络编程:基于Scoket最简单的CS
    Windows网络编程:同步/异步 阻塞/非阻塞
    1.WebGL:简介
    无聊的面试啊:2020
    第一次面试
    实习第三周
    Eclipse新建web项目
  • 原文地址:https://www.cnblogs.com/pureLaw/p/13765863.html
Copyright © 2020-2023  润新知