您的位置:首页 > 理论基础 > 计算机网络

TCP 三次握手和四次挥手详解

2013-05-31 11:18 489 查看
1. TCP 报文格式详解



(1). 源端口和目的端口字段——各占 2 字节,标识了发送方和接收方的应用进程,如2210,80端口
(2). 序号字段——占 4 字节,TCP 连接中传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
(3). 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
(4). 数据偏移(4位首部长度)——占4bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远
(5). 保留字段——占6bit,保留为今后使用,但目前应置为 0
(6). 紧急比特 URG —— 当URG 为1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
(7). 确认比特 ACK —— 只有当 ACK为 1 时确认号字段才有效,当 ACK为 0 时,确认号无效
(8). 推送比特 PSH (PuSH) —— 接收TCP收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付
(9). 复位比特 RST (ReSeT) —— 当 RST为 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,通知一下对方
(10). 同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文
(11). 终止比特 FIN (Final) —— 用来释放一个连接,当FIN 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
(12). 窗口字段 —— 占 2 字节,窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限
(13). 检验和 —— 占 2 字节,检验和字段检验的范围包括首部和数据和伪段头(不是TCP里的信息,但是计算校验和的时候也计算了的内容:IP地址,TCP数据段长度,协议类型)
(14). 紧急指针字段 —— 占 16 bit,紧急指针指出在本报文段中的紧急数据的位置
(15). 选项字段 —— 长度可变,TCP 规定了二种选项,最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 和窗口扩大因子,用于扩大接收方窗口
2. 三次握手和四次挥手详解




TCP标志位,有6种标示:SYN(synchronous建立联机) ,ACK(acknowledgement 确认) ,PSH(push传送), FIN(finish结束) ,RST(reset重置), URG(urgent紧急)
Sequence number(顺序号码) ,Acknowledge number(确认号码),在上面我们已经详细说明!

三次握手:
第一次握手:建立连接时,主机A发送SYN包(syn=m)到服务器,并进入SYN_SEND状态,等待主机B确认
第二次握手:主机B收到SYN包,必须确认主机A的SYN(ACK=m+1),同时自己也发送一个SYN包(SYN=n),即SYN+ACK包,此时主机B进入SYN_RECV状态
第三次握手:主机A收到主机B的SYN+ACK包,向主机B发送确认包ACK(ACK=n+1),此包发送完毕,主机A和主机B进入ESTABLISHED状态,完成三次握手
四次挥手:
当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
由主机B端再提出反方向的关闭请求,将FIN置1
主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息