Socket编程

来源:互联网 发布:mac txt转码 编辑:程序博客网 时间:2024/05/18 12:32

本文主要介绍项目使用的TCP/IP通信。
TCP/IP协议族,四个抽象层

应用层:TFTP,HTTP,SNMP,FTP,SMIP,DNS,Telnet等;
传输层:TCP,UDP;
网络层:IP,ICMP,OSPF,EIGRP,IGMP,
数据链路层:SLIP,CSLIP,PPP,MTU

Socket:
网络层的IP地址可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的
应用程序(进程)。
这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通
信就可以利用这个标志与其它进程进行交互。
socket在TCP/IP抽象层中的位置图
socket位于应用层与传输层之间。四个抽象层:
四个抽象层

socket通信流程:
socket通信流程

1服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
2服务器为socket绑定ip地址和端口号
3服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时 候服务器的socket并没有被打开
4客户端创建socket
5客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
6服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时
候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端
连接请求
9客户端连接成功,向服务器发送连接状态信息
10服务器accept方法返回,连接成功
11客户端向socket写入信息
12服务器读取信息
13客户端关闭
14服务器端关闭

Socket中TCP三次握手建立连接:
• 客户端向服务器发送一个SYN J
• 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1
• 客户端再向服务器发一个确认ACK K+1

三次握手建立连接示意图
三次握手

客户端的connect在三次握手的第二次返回,而服务器段的accept在三次握手中的第三次返回。

socket中TCP四次握手释放连接:
• 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
• 另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给
应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
• 一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一
个FIN N;
• 接收到这个FIN的源发送端TCP对它进行确认。
这样每个方向上都有一个FIN和ACK。

四次握手释放连接示意图
四次握手释放

http://www.cnblogs.com/codingmengmeng/p/5916598.html

原创粉丝点击