![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络
文章平均质量分 81
Gogo-2020
这个作者很懒,什么都没留下…
展开
-
重学TCP协议(11)TFO(Tcp Fast Open)
1. TFO为了改善web应用相应时延,google发布了通过修改TCP协议利用三次握手时进行数据交换的TFO(TCP fast open,RFC 7413)。TFO允许在TCP握手期间发送和接收初始SYN分组中的数据。如果客户端和服务器都支持TFO功能,则可以减少建立到同一服务器的多个TCP连接的延迟。这是通过在初始TCP握手之后在客户端上存储TFO cookie来实现的。如果客户端稍后重新连接,则此TFO cookie将发送到服务器,从而允许连续的TCP握手跳过一个往返延迟,从而减少延迟。2. T原创 2021-05-10 20:56:52 · 3663 阅读 · 1 评论 -
重学TCP协议(10)SYN flood 攻击
1.SYN flood 攻击SYN Flood(半开放攻击)是一种拒绝服务(DDoS)攻击,其目的是通过消耗所有可用的服务器资源使服务器不可用于合法流量。通过重复发送初始连接请求(SYN)数据包,攻击者能够压倒目标服务器机器上的所有可用端口,导致目标设备根本不响应合法流量。例如:客户端伪造了大量的虚假的IP地址,不断给我们服务器发SYN,而服务器回复ACK+SYN给大量虚假的IP地址,并且使得大量连接处于SYN_RCVD 状态,就会把我们服务器的半连接队列挤爆,从而无法响应那些合法的请求。2. 如何原创 2021-05-10 20:38:32 · 355 阅读 · 0 评论 -
重学TCP协议(9) 半连接队列、全连接队列
1. 半连接队列、全连接队列基本概念三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步),同时开启一个定时器,如果超时还未收到 ACK 会进行 SYN+ACK 的重传,重传的次数由 tcp_synack_retries 值确定。在 CentOS 上这个值等于 5。;第三步的时候server收到client的ack,如果这时全连接队列没满,那么从半连接队列拿出相关信息放入到全连接队列中,否则按tcp_abort_on_o原创 2021-05-06 18:18:06 · 615 阅读 · 0 评论 -
重学TCP协议(8) TCP的11种状态
TCP的11种状态为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。共有的:(1)CLOSED (2)ESTABLISHED 。1. LISTEN(服务端)首先服务端需要打开一个 socket 进原创 2021-05-06 11:15:51 · 738 阅读 · 0 评论 -
重学TCP协议(7) Timestamps 选项
1.Timestamps 选项的组成部分时间戳选项占10个字节= kind(1字节) + length(1字节) + info (8字节),其中kind=8,length=10,info由timestamp(TS value)和timestamp echo(TS Echo Reply)两个值组成,各4个字节的长度。2. Timestamps 选项工作原理以一次抓包为例:发送方发送数据时,将一个发送时间戳 1590508660 放在发送方时间戳TSval中接收方收到数据包以后,将收到的时间戳原创 2021-05-06 09:58:46 · 1949 阅读 · 1 评论 -
重学TCP协议(6) 四次挥手
1. 四次挥手客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了原创 2021-05-05 20:33:06 · 417 阅读 · 0 评论 -
重学TCP协议(5) 自连接
1.自连接是什么在发起连接时,TCP/IP的协议栈会先选择source IP和source port,在没有显示调用bind()的情况下,source IP由路由表确定,source port由TCP/IP协议栈从local port range中选取尚未使用的port。如果destination IP正好是本机,而destination port位于local port range,且没有服务器监听(listen)的话,source port可能正好选中了destination port,这就出现了(原创 2021-05-05 20:06:09 · 411 阅读 · 0 评论 -
重学TCP协议(4) 三次握手
三次握手1、 客户端发送的一个段是 SYN 报文,这个报文只有 SYN 标记被置位。凡是消耗序列号的 TCP 报文段,一定需要对端确认。如果这个段没有收到确认,会一直重传直到达到指定的次数为止。2、 服务端收到客户端的 SYN 段以后,将 SYN 和 ACK 标记都置位。SYN 标记的作用与步骤 1 中的一样,也是同步服务端生成的初始序列号。ACK 用来告知发送端之前发送的 SYN 段已经收到了,「确认号」字段指定了发送端下次发送段的序号,这里等于客户端 ISN 加一。 与前面类似 SYN + A原创 2021-04-23 09:38:58 · 147 阅读 · 0 评论 -
重学TCP协议(3) 端口号及MTU、MSS
端口相关的命令查看端口是否打开使用 nc 和 telnet 这两个命令可以非常方便的查看到对方端口是否打开或者网络是否可达。如果对端端口没有打开,使用 telnet 和 nc 命令会出现 “Connection refused” 错误查看监听端口的进程使用 netstatsudo netstat -ltpn | grep :22使用 lsof因为在 linux 上一切皆文件,TCP socket 连接也是一个 fd。因此使用 lsof 也可以sudo lsof -n -P -i:22原创 2021-04-23 09:02:25 · 571 阅读 · 0 评论 -
重学TCP协议(2) TCP 报文首部
TCP 报文首部源端口和目标端口TCP 报文头部里没有源 ip 和目标 ip 地址,只有源端口号和目标端口号端口号分类熟知端口号(well-known port)已登记的端口(registered port)临时端口号(ephemeral port)熟知端口号(well-known port)熟知端口号由专门的机构由 IANA 分配和控制,范围为 0~1023。为了能让客户端能随时找到自己,服务端程序的端口必须要是固定的。很多熟知端口号已经被用就分配给了特定的应用,比如 HTTP 使用原创 2021-04-22 21:45:43 · 1325 阅读 · 0 评论 -
重学TCP协议(1) TCP/IP 网络分层以及TCP协议概述
TCP/IP 网络分层协议的分层从上往下依次是Ethernet II:网络接口层以太网帧头部信息Internet Protocol Version 4:互联网层 IP 包头部信息Transmission Control Protocol:传输层的数据段头部信息,此处是 TCP 协议Hypertext Transfer Protocol:应用层 HTTP 的信息应用层(Application Layer)应用层的本质是规定了应用程序之间如何相互传递报文,很多应用层协议都是由 RFC 文档定义原创 2021-04-22 21:00:12 · 489 阅读 · 0 评论