linux内核中会维护两个队列:  1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态  2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态  3)当有一个SYN到来请求建立连接时,就在未完成队列中新建一项.当三次握手过程完成后,就将套接口从未完成队列移动到已完成队列.  4)backlog曾被定义为两个队列的总和的最大值,Berkely实现中的backlog值为上面两队列之和再乘以1.5. 5)如果当客户端SYN到达的时候队列已满,TCP将会忽略后续到…
1 listen函数(http://man7.org/linux/man-pages/man2/listen.2.html) int listen(int sockfd, int backlog); 该函数被服务端调用,指明了sockfd所指向的套接字是一个被动套接字,sockfd参数说明内核协议栈需要监听的套接字,backlog参数指定已完成tcp链接队列的容量. 2 tcp三次握手.未完成队列.已完成队列 服务端listen函数调用成功后会马上返回,与此同时系统内核开始监听参数sockfd所…
一:概述 - 由于 IP 的传输是无状态的,IP 提供尽力服务,但并不保证数据可以到达主机. - 所以,数据的完整性需要更上层的 传输层来保证.TCP和UDP 均属于 传输层. 二:UDP - 特点 - 不具有可靠性的数据报协议. - UDP 虽然可以确定发送消息的大小,却不能保证消息的到达. - 应用场景 - 即时通讯 - 包总量较少通讯 - 广播通信 三:TCP - 特点 - 面向连接的,可靠的流协议. - 流即为不间断的数据结构,虽然可以保证发送的顺序,但是还是犹如没有任何间隔的发送给服务…
网络传输数据是需要保证字节序的正确,才能保证传输数据的准确,网络字节序一般是大端字节序.qt提供了以下两种方法来将本地字节序转换为网络字节序: 方法一,使用qt提供的字节序转换函数 T qFromBigEndian(const uchar * src)T qFromBigEndian(T src)T qFromLittleEndian(const uchar * src)T qFromLittleEndian(T src)void qToBigEndian(T src, uchar * dest…
概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 1.TCP连接建立--三次握手 几个概念: seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在 一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用的 ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送报文段都必须要把ACK置为1 SYN:同步序列号,用来发起一个连接.当SYN=1而ACK…
1.连接建立=>数据传输=>连接释放 2.主动发起连接的是客户端,被动接受连接的是服务器 3.三次握手 客户端 ==> SYN是1同步 ,ACK确认标志是0,seq序号是x ==> 服务器 客户端 <== SYN是1同步 ,ACK确认标志是1,seq序号是y,ack确认号是x+1 <==服务器 客户端 ==> ACK确认标志是1,seq序号是x+1,ack确认号是y+1 ==>服务器 4.为什么需要第三次握手再次确认,因为服务器需要确认客户端收到我的回复 5…
1.源端口和目的端口:各占2个字节,分别写入源端口和目的端口: 2.序列号:占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号.例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始: 3.确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号.例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据.因此,B期望收到A的下一个数据…
TCP流和UDP数据报之间的区别 1.TCP本身是面向连接的协议,S和C之间要使用TCP,必须先建立连接,数据就在该连接上流动,可以是双向的,没有边界.所以叫数据流 ,占系统资源多 2.UDP不是面向连接的,不存在建立连接,释放连接,每个数据包都是独立的包,有边界,一般不会合并. 3.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证 UDP使用场景 1.需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用.如DHCP协议就是基于UDP的.一般的获取IP地址都是内网请…
流量控制:数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失.流量控制用于防止在端口阻塞的情况下丢帧,这种方法是当发送或接收缓冲区开始溢出时通过将阻塞信号发送回源地址实现的.流量控制可以有效的防止由于网络中瞬间的大量数据对网络带来的冲击,保证用户网络高效而稳定的运行. 1.通信双方主机上都分别有一个“发送窗口”和一个“接受窗口”2.TCP连接阶段,双方协商窗口尺寸3.发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认,等待确认机制4.…