[TCP协议]三次握手及四次挥手
2016-01-28 23:49
309 查看
TCP协议三次握手及四次挥手
什么是TCP协议
TCP的连接过程
TCP连接的建立三次握手
TCP连接的释放四次挥手
TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它有如下特点:
TCP是面向连接的传输层协议
TCP提供可靠的交付服务
TCP是全双工通信,在连接的两端都设有发送缓存和接收缓存
发送缓存用来暂存TCP**准备发送**的数据
以及TCP已经发送但尚未收到确认的数据
接收缓存用来暂存按序到达的但尚未被接收应用程序读取的数据
以及不按序到达的数据
TCP是面向字节流的,应用程序和TCP交互是一次一个大小不等的数据块
TCP传送的数据单元成为报文段。报文段分为TCP首部和TCP数据两部分。
TCP报文段首部:
下面稍微解释一下三次握手以及四次握手要用到的字段:
端口是传输层和应用层的服务接口
序号字段seq,TCP为传送的数据流中的每一个字节都编上一个序号。序号字段的值指本报文段所发送的数据的第一个字节的序号。
确认号ack是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,表明到N-1为止的数据都已经正确收到。
数据偏移,表明首部的长度
确认位ACK,只有当ACK=1时确认号字段有效,ACK=0时确认号无效,TCP规定在连接建立后所有传送的报文段都必须把ACK置1.
同步位SYN,SYN=1表示这是一个连接请求或连接接收保温。
当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。
终止位FIN 用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接。
TCP连接的建立采用Client/Server方式。主动发起连接建立的应用进程叫做Client,被动等待连接建立的应用进程叫做Server。
Client像Server发送连接请求报文,其中首部SYN=1, seq将随机生成为一个数x。
Server为该TCP连接分配TCP缓存和变量。SYN和ACK置为1,确认号ack为x+1,seq为服务器随机生成的一个数y
Client收到确认报文后,为该连接分配缓存和变量。ACK=1,seq=x+1,确认号ack为y+1。该报文段可以携带数据了。
Client打算关闭连接,就向TCP发送一个连接释放报文段,该报文段FIN=1,seq=u(前面发送的序号+1)。此时Client不再发送数据。
Server收到连接释放报文段后即发出确认,确认号是ack=u+1,seq=v(前面发送的序号+1)。此时Client到Server这个方向的连接就释放了,TCP连接处于半关闭状态。
若Server已经没有要向Client发送的数据了,就通知Client释放连接,此时FIN=1,seq=w
Client收到连接释放报文段后,必须发出确认,ACK=1,ack=w+1,此时TCP连接还没有释放掉,需要等待2MSL后,才进入到连接关闭状态。
参考:
1 http://biancheng.dnbcw.info/1000wen/438107.html
2 http://www.cnblogs.com/rootq/articles/1377355.html
3 王道论坛 2015计算机网络联考复习指导
什么是TCP协议
TCP的连接过程
TCP连接的建立三次握手
TCP连接的释放四次挥手
[TCP协议]三次握手及四次挥手
什么是TCP协议
TCP(Transmission Control Protocol) 即传输控制协议TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它有如下特点:
TCP是面向连接的传输层协议
TCP提供可靠的交付服务
TCP是全双工通信,在连接的两端都设有发送缓存和接收缓存
发送缓存用来暂存TCP**准备发送**的数据
以及TCP已经发送但尚未收到确认的数据
接收缓存用来暂存按序到达的但尚未被接收应用程序读取的数据
以及不按序到达的数据
TCP是面向字节流的,应用程序和TCP交互是一次一个大小不等的数据块
TCP传送的数据单元成为报文段。报文段分为TCP首部和TCP数据两部分。
TCP报文段首部:
下面稍微解释一下三次握手以及四次握手要用到的字段:
端口是传输层和应用层的服务接口
序号字段seq,TCP为传送的数据流中的每一个字节都编上一个序号。序号字段的值指本报文段所发送的数据的第一个字节的序号。
确认号ack是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,表明到N-1为止的数据都已经正确收到。
数据偏移,表明首部的长度
确认位ACK,只有当ACK=1时确认号字段有效,ACK=0时确认号无效,TCP规定在连接建立后所有传送的报文段都必须把ACK置1.
同步位SYN,SYN=1表示这是一个连接请求或连接接收保温。
当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。
终止位FIN 用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接。
TCP的连接过程
TCP是面向连接的协议,因此每一个TCP连接都有三个阶段:连接建立,数据传送和连接释放。TCP连接的传输层的协议端口称作套接字(socket)。传输层的协议端口拼接到IP地址即构成了套接字。TCP连接的建立采用Client/Server方式。主动发起连接建立的应用进程叫做Client,被动等待连接建立的应用进程叫做Server。
TCP连接的建立(三次握手)
Client像Server发送连接请求报文,其中首部SYN=1, seq将随机生成为一个数x。
Server为该TCP连接分配TCP缓存和变量。SYN和ACK置为1,确认号ack为x+1,seq为服务器随机生成的一个数y
Client收到确认报文后,为该连接分配缓存和变量。ACK=1,seq=x+1,确认号ack为y+1。该报文段可以携带数据了。
TCP连接的释放(四次挥手)
Client打算关闭连接,就向TCP发送一个连接释放报文段,该报文段FIN=1,seq=u(前面发送的序号+1)。此时Client不再发送数据。
Server收到连接释放报文段后即发出确认,确认号是ack=u+1,seq=v(前面发送的序号+1)。此时Client到Server这个方向的连接就释放了,TCP连接处于半关闭状态。
若Server已经没有要向Client发送的数据了,就通知Client释放连接,此时FIN=1,seq=w
Client收到连接释放报文段后,必须发出确认,ACK=1,ack=w+1,此时TCP连接还没有释放掉,需要等待2MSL后,才进入到连接关闭状态。
参考:
1 http://biancheng.dnbcw.info/1000wen/438107.html
2 http://www.cnblogs.com/rootq/articles/1377355.html
3 王道论坛 2015计算机网络联考复习指导
相关文章推荐
- 网络编程(三) 下载任务,支持断点续传
- 2016-1-28 图解HTTP(03)
- Android开发请求网络方式详解
- HttpURLConnetion的使用
- 一个简单的Socket分包程序
- android网络交互
- Androidx学习笔记(31)--- android-smart-image-view查看网络图片
- Java NIO 网络编程
- HTTP协议里面request请求和response响应重要的头
- Centos6.5 网络配置
- 判断移动网络是否连接可用!
- 网络编程(基础)
- JAVA网络编程UDP案例
- JAVA网络编程UDP案例
- Win7环境下如何开启802.1X 无线网络认证
- Android Studio bug:Error:Could not run build action using Gradle distribution 'https://services.grad
- 神经网络中误差反向传播(back propagation)算法的工作原理
- 构造HTTP请求Header实现“伪造来源IP”
- AJAX中XMLHttpRequest对象详解(3)
- jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding