那一天,人们终于回想起了被BUG支配的恐惧
Toggle navigation
Home
AboutMe
Links
Archives
Tags
TCP连接的建立和终止
2017-04-16 11:22:44
744
0
0
weibo-007
#TCP连接的建立和终止 本文将阐述两个主机之间通过TCP协议通信的话需要哪些步骤,以及在建立连接的过程中经历哪些状态。并使用tcpdump工具帮助我们调试TCP应用,使我们掌握TCP如何建立和终止 ##TCP和UDP 首先的必须说一下TCP和UDP两种传输层协议;UDP是一种不可靠的传输协议,使用UDP协议时候,一个主机直接把一个数据报扔给另一个主机,而不考虑任何丢失的因数;所以UDP协议效率高不可靠。相反,TCP协议被定义为一种可靠传输协议,必须保证数据报一定要传输到对方(如果有意外,也会给出原因),要实现这种保证,就需要三次握手连接,传输数据确认,四次挥手告别,所以TCP协议是一种复杂,可靠的传输协议。 ##三次握手 当使用TCP协议传输数据时,为了保证数据的可靠传输,必须先建立连接,当建立一个TCP连接时,会发生以下情形 1. 客户端首先发送一个SYN分节,告诉服务器客户端将在连接中发送数据的初始序列号。 2. 服务器接收到客户端的SYN分节,必须发送一个确认(ACK),**同时**自己也得发送一个SYN分节,他告诉客户端服务器将在同一连接中发送数据的初始分节序列 3. 客户端收到服务器的SYN之后,发送一个ACK确认,三次握手完成 ![image](http://note.youdao.com/yws/api/personal/file/WEBa845caae3bacc5f1ea2333677f0b780e?method=download&shareKey=3cde824d1dba64df993f764f0126a2b9) ##四次挥手 当两台主机使用TCP协议传输数据时,任何一方都不能擅自断开连接,否则后果很严重。比如数据接收方擅自断开连接之后,结果数据发送方还有数据需要发送,这样就会导致数据收发的不一致。所以,建立一个TCP协议需要三次握手,同样,断开一个TCP连接需要四次挥手 1. 某个应用进程首先调用close,则该端为主动关闭,该端的TCP发送一个FIN分节,表示数据发送完毕 2. 接收到这个FIN的对端称为被动关闭,这个传递过来的FIN由TCP确认,即发送一个ACK。它的接收也作为一个文件结束符传递给接收端应用进程。 3. 一段时间后,接收这个文件结束符的进程将调用close关闭它的套接字,这导致它的TCP也发送一个FIN 4.主动关闭的一段接收这个FIN并发送一个ACK确认 ![image](http://note.youdao.com/yws/api/personal/file/WEBc9be7bd7fe79fd565e8e4a6d4740d795?method=download&shareKey=dde3cd7d6c50df907990644d9dc27604) ##使用tcpdump调试 使用tcpdump命令可以查看指定网卡的数据分组交换情况,这里直接使用nginx实现的服务器,然后客户端(111.199.15.197)访问服务器(112.74.22.176)上的一个页面,当浏览器输入地址,按下Enter键的时候,整个过程如下 ![image](http://note.youdao.com/yws/api/personal/file/WEBeda234e2535442811792438006dbe5c5?method=download&shareKey=4dcf16472fa5d2606442641a56615b84) 其中,112.74.22.176.8113表示客户端,112.74.22.176.8113表示服务端。 红框内的三次分组交换表示TCP建立连接的三次握手,可以看到 1. 客户端首先通过56495端口向服务器的8113端口发起连接请求,发送了一个SYN分节seq 3414416386 2. 服务器回复一个ACK ack 3414416387(客户端的SYN+1)和一个自己的SYN分节seq 2867218461 3. 客户端恢复一个确认ACK ack 2867218462(服务端的SYN+1)。建立连接完成 绿框内的数据分组交换表示数据传输的过程,然后粉丝的4行分组交换就表示四次挥手了 1. 服务端发送一个FIN seq 2867218716表示数据发送完毕 2. 客户端回复一个确认ACK ack 2867218717(服务端SYN+1) 3. 客户端进程调用close,于是发送FIN seq 3414416788 4. 服务端回复客户端一个确认ACK ack 3414416789(客户端SYN+1),整个链接就此结束。
Pre:
MySQL事务和隔离级别
Next:
Socket网络编程入门
0
likes
744
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.