1.1连接概念
在之前我们知道TCP的特性之一就是“有连接的”,那我们客户端建立连接是通过在应用程序中进行调用的,然后系统内核帮我们建立连接
连接:所谓的建立连接就是通信的双方保留对方的一些信息数据
那么这里的内核中的连接具体过程如下:
1.2如何连接(三次握手)
这里就涉及到一个TCP报文段标志位:syn;
此处的syn就是synchronize的首字母缩写,那么此时表示的就是同步的意思,但是在多线程这个场景下,我们叫做加锁;
syn:数据报的特点:
1.不携带载荷,就是没有应用层数据报
2.含有TCP 报头,IP报头,以太网数据帧,这里的TCP报头包含客户端的端口号,IP报头包含客户端的IP地址
具体三次握手过程:
那么这里小编就给大家一一解释一下吧:
1.首先客户端向服务器发起请求syn,表示我想和你建立连接;
2.然后服务会发送一个ack表示我收到了信息,然后发送syn表示我愿意建立连接
3.最后客户端最后发送一次ack表示我收到了信息;
问题一:这里的服务求对于客户端发来的请求都会接收吗?
1.一般情况下,服务求都会进行接受,因为服务器本来就是干这个的;
2.服务器负载极高的境况下,无法进行响应,因为客户端发送过来的请求太多了 ;
问题二:这里的syn在不同场景下的区别
1.在多线程环境下:
这里的synchronized是为了保证多线程下线程的执行顺序,保证线程安全
2.在TCP报文段中:
这里的syn同步是为了进入连接状态,服务器和客户端共同完成一系列工作
问题三:这里的三次握手体现在哪里,不是四次吗?
由于这里的网络传输会涉及到包的封装和分用,所以这里两个包合成一个包就会节省开销,并且这里的客户端发送的syn和ack相差的时间不多,所以就可以打包成一个
那么最终的三次握手这里的图如下:
注意补充:在三次握手的过程中“确认应答和超时重传机制”这两个特性都是存在的~~~
握手概念:像syn这种数据包,不携带任何数据,没有载荷,没有应用层数据包,没有任何业务逻辑的,我们就任务syn的作用就是“打招呼”,形象的叫做握手~~
1.3三次握手的意义
1.第一种意义
三次握手可以针对通信路径,投石问路,确认当前的路径是否是通畅的(这是针对的中间路径)
举例:在地铁中,每天早上都有特定的地铁检修工,对地铁的观察修复后,地铁会优先空车跑一路,确认过是否通畅后,在进行接客;
2.第二种意义
三次握手也在检查发送双方的接受能力和发送能力是否正常(这是针对的通信的两端)
举例:假如双方打游戏交流连麦的时候,我会首先说“喂喂喂,听得到吗?”,对方回“听到了”(此时我们就知道我的麦没有问题,然后它的耳机没有问题)然后我再回“好的”,那么此时 (我的耳机没有问题,他知道它的麦就没有问题);
3.第三种意义
三次握手也是为了协商一些重要的参数,通信是双方的事情,其中有些内容就要保持一致
这里的协商就是在选项里体现(最多40个字节) ,报头固定位20字节,然后这里的tcp报头最大就是60字节;
这里的重要一部分关键就是“通信序号”
这里的每次通信连接,通信序号相差很大,不是0,1开始的,那么就解决了一下问题:
举例:假如在三次握手四次挥手结束后,由于网络传输存在“先发后至的情况,那么就会导致一个数据堵车”,在第二次三次握手通信后才传输到,那么就会由于前面的包的序号和此次的传输的包序号相差很大就会将这个数据丢弃~~~