TCP⼀ip 的三次握手 和 socket 是什么关系?

2024-12-17 15:40:47
推荐回答(4个)
回答1:

这是你创建的套接字类型决定的,常用的套接字是数据流类型(TCP)和数据报文类型(UDP),创建这些类型的套接字的时候就已经带上了相应的协议栈,这些握手信息在协议栈内部就已经实现了,不需要上层应用去实现
如果你想自己去控制握手信息,需要创建原始套接字,这种类型的套接字是基于IP层的,很多抓包工具就是通过这种类型的套接字来实现的,在这一层上你就可以自己定义处理握手信息,但这样相当于你要自己来实现TCP协议栈了,这难度太高,而且一般情况下也没必要
如果只是对握手的过程感兴趣,安装一个抓包工具观察一下连接的时候C/S之间的通信数据包就可以了

回答2:

socket存在的目的就是为了避免你接触三次握手在内的细节,实际上你甚至不需要了解你用的实际上是TCP协议。
socket这样设计,有助于在一些与TCP协议相仿的新的计算机交换信息的方式的开发上利用你为TCP协议的环境下开发出的代码。

如果你为路由器信息过滤这样是设备开发软件,或者是开发带网络功能的操作系统,就需要例如三次握手这样的详细资料。
设计TCP的替代协议时也需要这些知识。

但是你开放基于socket接口的程序时,这些知识是否有用呢?
当然是的。例如中国现在的互联网信息过滤就用到了三次过手过程中的RST包。
中国的过滤设备会对连接的双方发送伪造的RST包,中断一个TCP连接,使得带敏感信息的网页无法被我们浏览到。

因此我说,了解这些知识,对于应用程序将来可能遇到的问题是有帮助的。

回答3:

TCP/ip是一个整体协议,我们讨论时最好分开说
IP在网络层,TCP在传输层
传输层的作用就是给编程人员提供操作的平台(程序员无法控制网络层)
这就需要传输层提供一些命令,这些就是“原语”比如 connect ,listen,...,socket就是这些原语的集合
当你作为程序员建立一个连接时,要使用connect原语
connect是怎样建立连接的呢,它具体需要三步握手,以确定双方都准备好了,当然这个就不用程序员操心了
一句话:socket 原语就是要隐藏握手的细节

回答4:

我们用的socket只用来建立链接,在建立链接的过程中,也就是connect函数里有三次握手的部分,这个我们是看不到的,windows系统里不是有设这tcp/ip的么,握手由它实现了。不用考虑。要是想学,可以看linux源码关于tcp/ip的部分。网上可以搜到的。