织梦CMS - 轻松建站从此开始!

罗索

TCP过程

落鹤生 发布于 2011-11-07 11:00 点击:次 
TCP整个过程分四个阶段:准备,连接,发送数据,终止。
TAG:

TCP整个过程分四个阶段:准备,连接,发送数据,终止。

服务器调用socket()创建套接字,调用bind()绑定地址端口,调用listen()进入侦听,调用accept()接收连接,并阻塞在accept()中,客户端调用socket()创建套接字,这些过程属于准备阶段。

当客户端调用connect()时,服务器的accept()会返回一个连接套接字,这个过程属于连接阶段,看似很简单,实际很复杂,连接的三次握手就在这中间完成了。

服务器利用accept()返回的连接套接字调用send()和recv()向客户端发送数据和接收客户端的数据,客户端也通过send()和recv()向服务器发送数据和接收服务器发送来的数据,这是发送数据阶段。

服务器和客户端调用close()关闭连接,这是终止阶段,这个阶段也很复杂。

下面详细看连接阶段和终止阶段TCP协议都做了什么。

当客户端调用connect的时候,会向服务器发送一个SYN分节,通知服务器开始连接,分节中带了即将发送数据的初始序列号,假设J,并且 connect开始阻塞。服务器的收到客户端发来的SYN(J)分节,就回复一个ACK(J+1)分节,表示这个ACK是针对刚才的SYN分节的回应,同 时还发送一个SYN分节给客户端,这个分节也带了服务器即将发送数据的初始序列号,假设K。客户端收到服务器发送过来的ACK(J+1)和SYN(K)以 后,会针对服务器的SYN(K),发送一个ACK(K+1)给服务器,同时connect()返回。当服务器收到ACK(K+1)以后,accept() 返回。握手完成。这个流程可以用图表示:

当客户端调用close()关闭套接字的时候,会向服务器发送一个FIN分节,分节中也会有一个终止序号,假设M。服务器收到FIN(M),会像客 户端发送ACK(M+1)回复,同时会向服务器的应用层传递文件结束符,应用层的read()接收到文件结束符则返回0,表示不会在接收到数据。服务器调 用close()关闭套接字,这时会像客户端发送一个FIN(N)分节,客户端的TCP层收到FIN(N)之后,向服务器发送ACK(N+1)分节,终止 连接完成。这个流程可以用图表示:

 

(bwmwm)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201111/15283.html]
本文出处:blog.csdn.net/bwmwm 作者:bwmwm
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容