TCP三次握手,四次分手
1.什么是HTTP连接
http是建立在TCP协议之上的一种应用。
最显著的特点是每次请求,都需要服务器响应,请求结束后,会主动释放连接。
1)在HTTP 1.0中,客户端的每次请求都要建立一次单独的连接,在处理完本次请求后,服务器会主动释放连接。
2)在HTTP 1.1中,一次连接可以处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
若服务器长时间没有收到客户端的请求,则认为客户端下线,服务器会主动释放连接。
2.什么是socket
套接字(socket)是TCP操作的单元,包含了通信双方的基本信息(连接使用的协议,本地主机的IP地址,端口,远地主机的IP地址,端口)
多个TCP连接可能需要通过同一个TCP协议端口传输数据,scoket可以实现数据传输的并发服务。
建立socket连接需要一对套接字,一个运行于客户端,一个运行于服务端。
建立连接分为三个步骤:服务器监听,客户端请求,连接确认
服务器监听:等待客户端的连接请求
客户端请求:客户端向指定服务器发出连接请求
连接确认:服务器端套接字监听到客户端套接字请求时,响应客户端请求,建立一个新的线程,把服务器端套接字的描述发给客户端,
客户端确认此描述后,正式建立连接,服务端套接字继续监听其他客户端请求。
socket支持多种传输层协议(TCP或UDP),当使用TCP协议连接时,该Socket连接就是一个TCP连接。
TCP连接时,双方可以互发消息,都可以主动关闭连接。
当使用HTTP协议时,在传输层使用的是TCP协议,但HTTP使用的是“请求-响应”模式,需要客户端发出请求,服务器才会主动响应。
3.什么是TCP
1)OSI七层模型
2)TCP头部
20字节的固定首部,加上不固定长度的选项(报文描述等),如下所示:
Source Port源端口,Destination Port目的端口各占2个字节,端口号配上IP首部中的地址,即可确定一个TCP连接。
Sequence Number序号,报文段中的第一个数据字节在数据流中的序号,用来解决报文乱序的问题。
Acknowledgment Numer确认号,确认号为接收端收到的序列号,加1,主要用来解决不丢包的问题
Offset数据偏移,值是由不固定长度的选项决定的
TCP Flags标志位,控制TCP的状态,URG,ACK,PSH,RST,SYN,FIN
Window窗口大小,滑动窗口(待研究)
检验和,检查数据是否有误
紧急指针,URG=1时,该字段有效,指出的是紧急数据在报文段中结束的位置
3)TCP通信示意图
4)三次握手
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x,然后客户端进入SYN_SEND状态,等待服务器的确认。
第二次握手:服务器收到SYN报文段。服务器收到SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Numer为x+1,同时,自己还要发送SYN请求信息,将SYN置为1,Sequence Number为y,服务端将上述所有信息放到一个报文段(即SYN+ACK报文段),一并发送给客户端,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Numer为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
5)四次分手
第一次分手:主机1(可以是客户端,也可以是服务器端)设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文,此时主机1进入FIN_WAIT_1状态,表示主机1没有数据要发送个主机2了。
第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number+1,主机1进入FIN_WAIT_2状态,主机2告诉主机1,我同意你的关闭请求,主机2进入CLOSE_WAIT状态。
第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态。
第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态,主机2收到主机1的ACK报文段以后,就关闭连接,此时,主机1等到2MSL后,依然没收到回复,则证明Server端已正常关闭,然后主机1也可以关闭连接了。
6)为什么要三次握手
如果连接已关闭,此时由于网络延迟等原因造成的重复分组到达时,服务端会认为客户端再次发出了连接请求,服务端发送ACK确认,如果不使用三次握手,此时连接会重新建立,并一直等待客户端发送数据,这种情况,服务端资源就白白浪费掉了,而使用三次握手,客户端这种情况是不会向服务端的确认发出确认的,服务端由于收不到确认,就知道客户端并没有要求建立连接。
7)为什么要四次分手
TCP是面向连接,可靠的,基于字节流的运输层通信协议。是全双工的模式,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了,但是,这个时候主机1还是可以接受来自主机2的数据,当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的,当主机2也发送了FIN报文段时,这个时候表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,主机1发送ACK确认报文段,主机2收到该报文段,关闭连接,主机1等待2MSL后关闭。
8)四次分手最后一次为什么要等待2MSL
主机1发送ACK确认报文段后,并不知道主机2有没有收到确认报文段,如果没有收到,超过1MSL,主机2会重发一次FIN请求,如果在2MSL时间,主机1没有收到重发的请求,说明主机2已经成功接收ACK确认报文并关闭,这是主机1也可以安心关闭了。
参考:https://github.com/jawil/blog/issues/14
TCP三次握手,四次分手的更多相关文章
- 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...
- 对TCP三次握手四次分手还不清楚,超简单解析
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...
- TCP三次握手四次分手—简单详解
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...
- Tcp 三次握手 四次分手
看了 余晟以为的 “tcp没那么难吧”,算是对三次握手,四次分手有了一点点理解,记录下来以方便自己以后的查看. 原文链接:https://mp.weixin.qq.com/s?__biz=MzA3MD ...
- TCP三次握手四次分手
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...
- TCP三次握手四次断开
今天被问到三次握手了,当时只是脑子里有印象,却忘了一些SYN细节,手动微笑. 这么下去还怎么混...赶紧复习个... 三次握手是什么? TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双 ...
- (转)TCP三次握手四次挥手
转自:http://www.jellythink.com/archives/705 参考:http://blog.csdn.net/whuslei/article/details/6667471 [注 ...
- Tcp三次握手四次挥手个人学习
最近想跳槽,学习了tcp中的三次握手与四次挥手,特意记录下,加深记忆 SYN 代表请求创建连接 FIN 表示请求关闭连接 ACK 代表确认接受,不管是三次握手还是四次分手,在回应的时候都会加上ACK= ...
- TCP三次握手/四次挥手详解
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...
随机推荐
- 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...
- ubuntu直接删除文件而不是移动到回收站
如你所知,你可以在文件(或者文件夹)上面点击右键选择“移动到删除文件夹”或者把它拖动到屏幕右下角的回收站里面来上传文件.唯一的问题是,在回收站里面的文件除非你手工清理不然不会自动清除,这可能导致安全问 ...
- vmware与virtualbox之对比分析
2012-04-01 16:01:17 vmware与virtualbox之对比分析 测试过程:本机安装双系统xp.ubuntu:在每个系统中安装两种虚拟机:每个虚拟机虚拟一个Win ...
- Tensorflow默认占满全部GPU的全部资源
一台服务器上装了多块GPU,默认情况下启动一个深度学习训练任务时,这个任务会占满每一块GPU的几乎全部存储空间.这就导致一个服务器基本上只能执行一个任务,而实际上任务可能并不需要如此多的资源,这相当于 ...
- js触摸事件
touch事件的绑定 电脑端的mouseDown,mouseUp,mouseMove分别对应移动端的touchstart,touchend,touchmove 下面的代码判断浏览器是电脑端还是移动端, ...
- windbg cs
!cs 扩展显示一个或多个临界区(critical section)或者整个临界区树 !cs Address 指定要显示的临界区地址.如果省略该参数,调试器显示当前进程中所有临界区. :> ...
- JAVA项目如何通过Docker实现Jenkins持续部署
原文地址:http://blog.51cto.com/dadonggg/1957691 本篇实操性的案例讲解——JAVA项目如何通过Docker实现持续部署(只需简单四步), 即:开发通过git pu ...
- Pusher 消息推送测试工具
1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...
- mvc 文件压缩 减少文件大小
using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; usin ...
- mysql中Table is read only错误解决方法
今天再我把数据库data 拷贝到linux 下运行程序 ”mysql中Table is read only的解决“ 出现这样的问题,查询资料. linux下执行如下命令即可 #mysqladmin - ...