Socket基础3

时间:2014-05-12 20:45:35   收藏:0   阅读:316

<以下摘自http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html>

网络层的“ip地址可以唯一标识网络中的主机,而传输层的“协议+端口可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。

socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

谨记对主机字节序不要做任何假定,务必将其转化为网络字节序再赋给socket。

一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。

网络I/O操作有下面几组:

只有就完了三次握手,但是这个三次握手发生在socket的那几个函数中呢?请看下图:

bubuko.com,布布扣

从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

 

 

 

 

socket中的四次握手释放连接的过程,请看下图:

bubuko.com,布布扣

图2、socket中发送的TCP四次握手

图示过程如下:

 

 

Socket基础3,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!