趣谈网络协议(九)套接字Socket

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/84329936
基于TCP协议的Socket程序函数调用过程

(1)TCP的服务器要先监听一个端口,一般是先调用bind函数,给这个Socket赋予一个IP地址和端口

(2)为什么要有端口,当一个网络包来的时候,内核要通过TCP头里面的这个端口,来找到你这个应用程序,把包给你

(3)为什么要有IP地址呢?一台机器会有多个网卡,也就会有多个IP地址,你可以选择监听所有网卡,也可以选择监听一个网卡,这样只有发给这个网卡的包,才会给你

(4)在内核中,为每个Socket维护两个队列。一个是已经建立了连接的队列,这时候连接三次握手已经完毕,已经处于established状态;一个是还没有完全建立连接的队列,这个时候三次握手还没完成,处于sync_rcvd的状态

(5)接下来,服务器端调用accept函数,拿出一个已经完成的连接进行处理。如果还没有完成,就要等着

(6)在服务器端等待的时候,客户端可以通过connect函数发起连接。先在参数中指明要连接的IP地址和端口号,然后开始发起三次握手。内核会给客户端分配一个临时的端口。一旦握手成功,服务器的accept就会返回另一个Socket

(7)连接建立成功之后,双方开始通过read和write函数来读写数据,就像往一个文件流里写东西一样

(8)基于TCP协议的Socket程序函数调用过程如下图
在这里插入图片描述


基于UDP协议的Socket程序函数调用过程

(1)下图是基于UDP协议的Socket函数调用过程
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/lwl2014100338/article/details/84329936