网站做浮动边框asp代码,东莞发布解封通告,磁业 东莞网站建设,wordpress安装教程1、TCP状态迁移图 2、TCP三次握手过程
2.1、握手流程 1、TCP服务器进程先创建传输控制块TCB#xff0c;时刻准备接受客户进程的连接请求#xff0c;此时服务器就进入了LISTEN#xff08;监听#xff09;状态#xff1b;
2、TCP客户进程也是先创建传输控制块TCB#xff…1、TCP状态迁移图 2、TCP三次握手过程
2.1、握手流程 1、TCP服务器进程先创建传输控制块TCB时刻准备接受客户进程的连接请求此时服务器就进入了LISTEN监听状态
2、TCP客户进程也是先创建传输控制块TCB然后向服务器发出连接请求报文这是报文首部中的同部位SYN1同时选择一个初始序列号 seqx 此时TCP客户端进程进入了 SYN-SENT同步已发送状态状态。TCP规定SYN报文段SYN1的报文段不能携带数据但需要消耗掉一个序号。
3、TCP服务器收到请求报文后如果同意连接则发出确认报文。确认报文中应该 ACK1SYN1确认号是ackx1同时也要为自己初始化一个序列号 seqy此时TCP服务器进程进入了SYN-RCVD同步收到状态。这个报文也不能携带数据但是同样要消耗一个序号。
4、TCP客户进程收到确认后还要向服务器给出确认。确认报文的ACK1acky1自己的序列号seqx1此时TCP连接建立客户端进入ESTABLISHED已建立连接状态。TCP规定ACK报文段可以携带数据但是如果不携带数据则不消耗序号。
5、当服务器收到客户端的确认后也进入ESTABLISHED状态此后双方就可以开始通信了
2.2、三次握手发生在socket的那几个函数中 从图中可以看出当客户端调用connect时触发了连接请求向服务器发送了SYN J包这时connect进入阻塞状态服务器监听到连接请求即收到SYN J包调用accept函数接收请求向客户端发送SYN K ACK J1这时accept进入阻塞状态客户端收到服务器的SYN K ACK J1之后这时connect返回并对SYN K进行确认服务器收到ACK K1时accept返回至此三次握手完毕连接建立
2.3、连接队列
syn队列半连接队列
accept队列全连接队列
3、TCP四次挥手过程
四次挥手不分客户端、服务器谁先发发起close则谁就是主动断开一方否则为主动断开一方主动方发生FIN包后会进入到FIN_WAIT_1状态也就是不管客户端还是服务器都有可能进入FIN_WAIT_1的状态也都有可能进入TIME_WAIT的状态。
socket中的四次握手释放连接的过程调用的函数
图示过程如下
某个应用进程首先调用close主动关闭连接这时TCP发送一个FIN M另一端接收到FIN M之后执行被动关闭对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据一段时间之后接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N接收到这个FIN的源发送端TCP对它进行确认。
这样每个方向上都有一个FIN和ACK。
4、为什么会有WIME_WAIT状态
为了避免最后一次ACK丢失对端没有收到对端会重传FIN执行第三次跟第四次挥手TIME_WAIT状态还能够响应也就是为了确保对方收到最后的ACK从而确保对方也能正常的断开连接
5、出现大量的CLOSE_WAIT状态连接的原因
close_wait状态出现在被动断开的一方如果被动断开一般recv会返回0出现大量的close_wait是因为对方的断开事件没有得到及时的处理解决方式就是及时处理对端的close事件recv() 0可以将IO事件的检测跟io事件的响应分开处理以保证能够及时的检测到IO断开事件
6、哪些场景会出来CLOSING的状态
双方同时调用close 7、TCP首部长度有哪些字段
详见TCP之报文首部格式 - Jummyer - 博客园 (cnblogs.com) 8、TCP在listen时的参数backlog的意义
backlog 表示accept全连接队列的大小也就是三次握手完成后server没有调用accept从 全连接队列 取出连接时连接队列中最大可存放的数量
9、acept发生在三次握手的哪一步
第三步 10、SYN攻击
服务器端的资源分配是在二次握手时分配的而客户端的资源是在完成三次握手时分配的所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址并向Server不断地发送SYN包Server则回复确认包并等待Client确认由于源地址不存在因此Server需要不断重发直至超时这些伪造的SYN包将长时间占用未连接队列导致正常的SYN请求因为队列满而被丢弃从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击
11、TCP与UDP的区别
11.1、TCP、UDP的区别
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前必须先在双方之间建立一个TCP连接之后才能传输数据。UDP---用户数据报协议是一个简单的面向数据报的运输层协议。UDP不提供可靠性它只是把应用程序传给IP层的数据报发送出去但是并不能保证它们能到达目的地。
1TCP是面向连接的UDP是面向无连接的
2UDP程序结构较简单
3TCP是面向字节流的UDP是基于数据报的
4TCP保证数据正确性UDP可能丢包
5TCP保证数据顺序到达UDP不保证
11.2、TCP、UDP的优缺点
TCP优点可靠稳定
TCP的可靠体现在TCP在传输数据之前会有三次握手来建立连接而且在数据传递时有确认、窗口、重传、拥塞控制机制在数据传完之后还会断开来连接用来节约系统资源。
TCP缺点慢效率低占用系统资源高易被攻击
在传递数据之前要先建立连接这会消耗时间而且在数据传递时确认机制、重传机制、拥塞机制等都会消耗大量时间而且要在每台设备上维护所有的传输连接。然而每个连接都会占用系统的CPU内存等硬件资源。因为TCP有确认机制、三次握手机制这些也导致TCP容易被利用实现DOS、DDOS、CC等攻击。
UDP优点快比TCP稍安全
UDP没有TCP拥有的各种机制是一种无状态的传输协议所以传输数据非常快没有TCP的这些机制被攻击利用的机会就少一些但是也无法避免被攻击。
UDP缺点不可靠不稳定
因为没有TCP的这些机制UDP在传输数据时如果网络质量不好就会很容易丢包造成数据的缺失。
11.3、TCP UDP适用场景
TCP传输一些对信号完整性信号质量有要求的信息。
UDP对网络通讯质量要求不高时要求网络通讯速度要快的场景。
11.4、tcp 怎样保证数据正确性
差错控制发送的数据包的二进制相加然后取反检测数据在传输过程中的任何变化如果收到段的检验和有差错TCP 将丢弃这个报文段和不确认收到此报文段。编号 排序 TCP 给发送的每一个包进行编号接收方对数据包进行排序把有序数据传送给应用层 确认 超时重传的机制 当 TCP 发出一个段后它启动一个定时器等待目的端确认收到这个报文段。如果不能及时收到一个确认将重发这个报文段。流量控制TCP 连接的每一方都有固定大小的缓冲空间TCP 的接收端只允许发送端发送接收端缓存区能接纳的数据。当接收方来不及处理发送方的数据能提示发送方降低发送的速率防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。拥塞控制当网络拥塞时减少数据的发送。发送方有拥塞窗口发送数据前比对接收方发过来的接收窗口取两者的最小值---慢启动、拥塞避免、拥塞发送、快速恢复
12、三次握手服务端和客户端分别发生在哪个函数中
客户端connect
服务端listen之后、accept之前被动实现的。accept会从全连接队列中取出一个
节点TCP控制块然后为该节点分配一个socket