TCP三次握手过程与对应的Berkeley Socket APIs的介绍
来源:互联网 发布:轩辕剑四极进阶数据 编辑:程序博客网 时间:2024/05/17 11:06
1. TCP三次握手
搜索到的一张三次握手过程的图片:
简单说明
(1)主动连接的一方(称为客户端C),发送SYN_C。
(2)被动打开连接的一方(称为服务器S),收到C的SYN_C后,会发送一个SYN_S;同时会对SYN_C作确认,返回一个ACK_S。SYN_S&ACK_S可以同时放到一个TCP segment中。
(3)C收到SYN_S+ACK_S,发送一个ACK_C,这个ACK_C对应SYN_S。
连接建立的过程,来回总共是3个TCP Segment。说点题外话,为什么是3个Segment呢?因为,其中一个SYN与ACK合到一个Segment中了。TCP两端同时打开的时候,就是来回交互4个segment。
2. 与三次握手对应的Berkeley Socket APIs
和连接建立相关的APIs有:connect, listen, accept3个,connect用在客户端,另外2个用在服务端。对于TCP/IP protocol stack来说,TCP层的tcp_in&tcp_out也参与这个过程。我们这里只讨论这3个应用层的APIs干了什么事情。
(1) connect
发送了一个SYN,收到Server的SYN+ACK后,代表连接完成。发送最后一个ACK是protocol stack,tcp_out完成的。
(2)listen
在Server这端,准备了一个未完成的连接队列,保存只收到SYN_C的socket结构;还准备了已完成的连接队列,保存了收到了最后一个ACK的socket结构。
(3)accept
应用进程调用accept的时候,就是去检查上面说的已完成的连接队列,如果队列里有连接,就返回这个连接;空的,blocking方试调用,就睡眠等待,nonblocking方式调用,就直接返回,一般一"EWOULDBLOCK“ errno告诉调用者,连接队列是空的。
好了,上面只是简单的介绍,没有涉及TCP的各种状态。和三次握手相关的状态有:SYN_SENT, SYN_RECVD, LISTEN和ESTABLISHED。
另外,三次握手的常见问题参考下面的文章:
http://blog.csdn.net/herm_lib/article/details/6019970
- TCP三次握手过程与对应的Berkeley Socket APIs的介绍
- TCP与SOCKET的三次握手的对应关系
- TCP与SOCKET的三次握手的对应关系
- TCP的三次握手与四次挥手过程介绍
- socket的tcp三次握手
- TCP的三次握手过程
- tcp的三次握手过程
- Tcp的三次握手过程
- TCP三次握手的过程
- TCP三次握手的过程
- TCP三次握手的过程
- socket 建立连接与三次握手的对应关系
- TCP/IP协议的连接与释放的三次握手过程及Socket套接字
- TCP协议的三次握手与四次挥手过程图解
- TCP三次握手 与 四次断开 的详细过程剖析
- TCP三次握手与四次挥手的过程及原因
- TCP三次握手与四次挥手的过程以及原因
- TCP协议的三次握手过程
- 理解编译器的编译模板过程
- 查找方法
- smarty-缓存(局部不缓存)
- 数组中的元素进行查找,打印出需求的元素
- 我们是农村的孩子,没有资格堕落【转】
- TCP三次握手过程与对应的Berkeley Socket APIs的介绍
- Mahout数据承载
- 使用ffplay播放USB设备时的频道选择
- 主板实例,接口的应用
- 典型的 C++ 程序员成长经历
- 美国哈佛大学图书馆凌晨4点座无虚席
- 接口问题
- 关于C语言中一,二级指针函数中的使用和c语言中和函数发生调用时,实参和形参都会占用内存吗?
- 异常处理