传输层
文章平均质量分 53
计算机网络传输层
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
TCP状态转换
1. CLOSED表示初始状态2. LISTEN该状态表示服务器端的某个socket处于监听状态,可以接受连接3. SYN_SENT表示客户端已经发送syn报文 当客户端socket执行connect方法时,它会发送syn报文,随即进入该状态3. SYN_RCVD该状态表示服务端收到syn报文。4. ESTABLISHED表示连接已经建立。 客户端收到第二次握手就进入该状态 服务端收到第三次握手就进入该状态5. FIN_WAIT_1主动关闭方向对方发送了FIN报文..原创 2021-10-01 17:35:03 · 299 阅读 · 0 评论 -
UDP打洞原理
1. 目的使两个使用了NAT的私有网络的Internet主机之间建立双向UDP连接。一般应用在p2p上2. 具体流程主机A登录QQ服务器,验证成功后获取好友列表信息 QQ服务器登记主机A的NAT后的公网IP与端口 主机B登录QQ服务器,验证成功后获取好友列表信息 QQ服务器登记主机B的NAT后的公网IP与端口 主机A想不经过QQ服务器直接发送消息给主机B,于是向QQ服务器请求获取主机B的公网IP与端口 主机A获得了主机B的公网IP和端口,然后发送udp消息给主机B 主机B的NAT因为收原创 2021-10-01 16:49:03 · 195 阅读 · 0 评论 -
什么是SYN cookie
1. syn cookie是用来干嘛的如上图,TCP建立连接过程中,服务端在第二次握手后会将连接放入半连接队列中。然后在第三次握手成功后,从半连接队列中移除加入到全连接队列中。 如果没有开启syn cookie,则当半连接队列满了之后,再有新的连接就会直接丢弃。 当开启了syn cookie后,就可以在不使用syn半连接队列的情况下成功建立连接。具体方法: 服务器收到syn请求(第一次握手)后,会根据当前状态计算出一个cookie值。放在syn+ack报文(第二次握手)中发出。 当客户端返原创 2021-09-27 22:48:23 · 2664 阅读 · 0 评论 -
TCP之重传机制
1. 超时重传1.1 什么是超时重传在发送数据时,发送方会设置一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据,这就是超时重传。 两种情况下会发生超时重传: 数据包丢失 确认应答丢失 1.2 超时时间应该设置为多少RTO(Retransmission Timeout 超时重传时间) RTT: 往返时延,一个数据报从发送到接收到响应所需要的时间 超时重传时间RTO的初始值应该略大于报文往返时延RTT的值 采用超时间隔加倍策略:每当遇到一次超时重传的原创 2021-09-26 14:02:37 · 851 阅读 · 0 评论 -
TCP之Socket编程
服务端和客户端初始化socket,得到文件描述符 服务端调用bind,绑定在IP地址和端口 服务端调用listen,进行监听 服务端调用accept,等待客户端连接 客户端调用connect,向服务端的地址和端口发起连接请求 服务端accept返回用于传输的socket的文件描述符(另一个文件描述符) 客户端调用write写入数据;服务端调用read读取数据 当客户端断开连接时,会调用close,那么会向服务端发送一个EOF,那么服务端read读取数据时,就会读取到这个EOF,待处理完数据..原创 2021-09-26 02:14:02 · 112 阅读 · 0 评论 -
TCP与UDP的区别与应用场景
1. 区别1.1 TCP面向连接 有可靠机制 面向字节流 TCP将应用程序看成是一连串的无结构的字节流。 TCP有一个缓冲区,当应用程序传送的数据块太长,TCP就可以把他划分短一些再传送。 如果应用程序一次只发一个字节,TCP也可以等待积累足够多的字节后再构成报文段发送出去 有流量控制机制 一对一通信1.2 UDP无连接 不可靠 面向报文 将应用层发来的消息作为报文,UDP一次发送一个报文。 所以应用程序必须选择合适大小的报文。 若报文太长,则IP层则需要分原创 2021-09-15 15:55:36 · 94 阅读 · 0 评论 -
TCP粘包问题
主要因为TCP是基于数据流传输。在socket网络编程中,都是端到端通信。由(客户端端口,服务端端口,客户端IP,服务端IP,传输协议)组成的五元组可以标识一个连接。发送端为了将多个发往接收端的包,更加高效地发给接收端,于是采用优化算法,将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后继续封包。如此就需要接收端进行分辨这些数据。1. 什么使TCP粘包问题TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一个包,从接受缓冲区来看,后一个包数据的头紧紧挨着前一个包数据的尾原创 2021-07-25 16:01:39 · 92 阅读 · 0 评论 -
TCP之保活计时器
除了时间等待计时器外,TCP还有一个保活计时器。如果客户端主动与服务端建立了TCP连接。但是后来客户端的主机突然发生了故障。服务端以后就不能收到客户端发来的数据,因此,应当由措施使服务器不要白白等下去。这就需要使用到保活计时器 服务端每收到一次客户端的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据,服务端就发送一个探测报文段,以后每隔75秒中发送一次。若连续发送10个探测报文段后仍无客户端的响应。服务端就认为客户端出现了故障,接着就会关闭这个连接。...原创 2021-07-25 14:52:10 · 295 阅读 · 0 评论 -
TCP之SYN攻击
当客户端向服务端发起连接请求时:服务端的资源分配时在第二次握手时分配的,而客户端资源时在完成第三次握手时分配的。所以服务端容易收到SYN泛红攻击。 SYN攻击就是客户端在短时间内伪造大量不存在的IP地址,并向服务端不断发送SYN包,服务端则回复确认包,并等待客户端确认。但由于源地址不存在,因此服务端就需要不断发生超时重传直至超时。 这些伪造的SYN包将长时间占用半连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引擎网络拥塞甚至系统瘫痪。如何检测SYN攻击:查看服务器上是否能看到大量的半连原创 2021-07-25 09:13:09 · 1172 阅读 · 0 评论 -
TCP之半连接状态
客户端向服务端发起连接请求,服务器第一次收到客户端的SYN之后,就会处于SYN_RCVD状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放到一个队列里,我们将这种队列称之为半连接队列。 全连接队列就是已经完成了三次握手,建立起连接就会放到全连接队列中去,如果全连接队列满了就可能会出现丢包的现象。补充关于SYN-ACK重传次数的问题服务器发送完SYN-ACK包,如果未收到客户端确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。如果重传次数超过系统规定的最大重传原创 2021-07-25 08:58:42 · 1403 阅读 · 0 评论 -
TCP的四次挥手
四次挥手步骤序列号与确认号规则不再叙述。ACK在建立连接之后都是1A发送连接释放报文,FIN=1; B收到之后发送确认,此时TCP属于半关闭状态,B还能向A发送数据但是A不能向B发送数据 当B不再需要连接时,B发送连接释放报文,FIN=1; A收到后发出确认,进入TIME-WAIT状态(先主动释放连接的一端才会进入这个状态)等待2MSL(最大报文存活时间)后释放连接。 B收到A的确认后释放连接四次挥手的原因以及TIME_WAIT状态的意义客户端发送了FIN连接释放报文请求后,服务.原创 2021-07-18 19:35:14 · 63 阅读 · 0 评论 -
TCP拥塞控制
拥塞控制是为了降低整个网络的拥塞程度 流量控制是为了照顾接收方的接收能力 如果网络出现拥塞,分组将会可能丢失,此时发送方会继续重传,从而导致网络拥塞程度更高,因此当出现网络拥塞时,应当控制发送方的速率。TCP主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复发送方需要维护一个叫做拥塞窗口的状态变量,注意拥塞窗口与发送窗口的区别:拥塞窗口只是一个状态变量,实际觉得发送发能发送多少数据的时发送方窗口。为了方便讨论,做出如下假设:接收方有足够大的接收缓存,因此不会发生流量控制;原创 2021-07-18 19:14:35 · 190 阅读 · 0 评论 -
TCP的滑动窗口
采用的是累计确认机制滑动窗口是缓存的一部分,用来暂时存放字节流。 发送方和接收方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小。发送方根据这个值和拥塞窗口信息来设置自己的窗口大小。发送窗口内的字节都允许被接收,接收窗口的字节都允许被接收,如果发送窗口左部的字节已经发送并且收到了确认,那么就讲发送窗口向右滑动一定距离。直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动窗口类似,接收窗口左部字节已经发送确认并交付主机,就右滑动接收窗口。接收窗口只会对窗口内最后一个原创 2021-07-18 16:52:56 · 663 阅读 · 0 评论 -
TCP协议如何保证可靠传输
1. 校验和对收到的数据包的二进制位校验,检测数据在传输过程中是否发生变化。如果收到该数据包的校验和有差错,TCP将丢弃这个报文段并且不确认收到此报文段。2. 确认应答+序列号(累计确认+seq)可以保证接收方能够对数据包进行排序,将有序的数据传送给应用层3. 超时重传当TCP发出一个段后,它会启动一个定时器,等待收到目的端确认报文,如果不能及时收到一个确认,将重发这个报文段4. 流量控制TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的原创 2021-07-18 16:35:53 · 131 阅读 · 0 评论 -
TCP的三次握手
假设A为客户端,B为服务器端首先B处于LISTEN(监听)状态,等待客户的连接请求 A向B发送了连接请求报文,SYN=1,ACK=0.选择一个初始序列号x。 B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号为x+1,同时也选择一个初始的序号y A收到B的连接确认报文,还要向B发出确认,确认号y+1,序号为x+1. B收到A的确认,连接建立为什么需要三次握手第一次握手,客户端什么都不知道;服务端知道自己的接收正常与客户端的发送正常 第二次握...原创 2021-07-18 16:13:51 · 97 阅读 · 0 评论