计算机网络基础

计算机网络基础

推荐直接看考研课:5.3.5 TCP拥塞控制_哔哩哔哩_bilibili

七层模型

image-20230502220344109

一些协议

image-20230503180843142

网络层(待补充)

传输层

速率

单位时间的数据量(在数字信道上单位时间从某一端到某一端的数据量,即数据传输率,也称数据率或比特率)

单位:

比特(bit)是数据量的最小单位,s(秒)是时间的最小单位。

所以速率单位为bit/s或bps(bit persecond),类似的有kb/s(k=10^3)、Mb/s(M=10^6)、Gb/s(G=10^9)、Tb/s(T=10^12),1Byte=8bit 1B=8b1B/s=8b/s(或1Bps=8bps)

带宽

单位时间最大数据量(计算机网络中的主机在数字信道上,单位时间内从一端传送到另一端的最大数据量,即最大速率)

例题

暂时认为是这样:

在带宽为1G的传输线路上,TCP使用的发送窗口大小为16bit,一个RTT的延迟时间为20ms。请问可以获得的最大吞吐率是多少?线路利用率是多少?

答:1G=1000Mb=110^6Kb = 110^9 bps

考虑TCP、IP首部和帧的构成,数据包总长度 L=16bit+ 40Byte×8 = 336bit

RTT 20ms = 2*10^-2 s

空中时延 = 数据长度/带宽 = 336bit bit/10^9 = 3.36*10^-7 s

最大吞吐率 = 数据长度/ (空中时延+往返时延) = 336/(3.3610^-7 s +210^-2 s) = 16kb

线路利用率 = 最大吞吐率/带宽 = 16kb/1G = 0.0016%

tcp udp

区别联系

三次握手四次挥手

三次握手这张图足矣

image-20230503121346103

(ps:注意一下状态和seq,ack)

四次握手

image-20230503122509219

场景

使用TCP对实时话音业务的传输有没有什么问题?使用UDP在传送文件时会有什么问题

使用TCP对实时话音业务的传输确实存在一些问题,同样,使用UDP在传送文件时也有一定的问题。下面分别解释这两种情况的问题。

  1. 使用TCP对实时话音业务的传输:

实时话音业务对延迟和实时性有很高的要求,但TCP是一种面向连接的、可靠的传输协议,它通过握手、重传、拥塞控制等机制来确保数据的完整传输。这些特性导致了以下问题:

a) 延迟:TCP的握手、确认和重传机制会增加通信的延迟,对实时话音业务不利。

b) 拥塞控制:TCP的拥塞控制会在网络拥塞时降低传输速率,可能导致实时话音质量下降。

c) 顺序传输:TCP保证数据按顺序到达接收端,但对于实时话音业务而言,一个丢失的音频包可能并不重要,因为用户更关心的是实时性。在这种情况下,接收端可能更愿意接受部分丢失的音频包,以减小延迟。

因此,实时话音业务通常会选择使用UDP(User Datagram Protocol,用户数据报协议)进行传输,因为它是无连接的、不可靠的,可以降低延迟,更适合实时性要求高的应用。

  1. 使用UDP在传送文件时的问题:

UDP是一种无连接的、不可靠的传输协议,它没有握手、确认和重传机制。这意味着在传输过程中可能会丢失数据包,而不会有任何重传。在传送文件时,这会导致以下问题:

a) 数据完整性:由于UDP不可靠,传输过程中可能丢失数据包,这对于文件传输来说是不可接受的,因为文件需要保证完整性。

b) 拥塞控制:UDP没有拥塞控制机制,因此在网络拥塞时,UDP可能会继续发送数据包,导致更多的数据包丢失,影响文件传输质量。

c) 顺序:UDP不能保证数据包的顺序到达接收端,这可能导致接收端需要对数据包进行重新排序,增加处理复杂性。

因此,在传送文件时,通常会选择使用TCP进行传输,因为它是面向连接的、可靠的,可以确保文件的完整传输。

SYN攻击

tcp syn 洪水攻积

  • 什么是 SYN 攻击(SYN Flood)?

    在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

    SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

    SYN 攻击是一种典型的 DoS/DDoS 攻击。

  • 如何检测 SYN 攻击?

    检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。

  • 如何防御 SYN 攻击?

    SYN攻击不能完全被阻止,除非将TCP协议重新设计。我们所做的是尽可能的减轻SYN攻击的危害,常见的防御 SYN 攻击的方法有如下几种:

    • 缩短超时(SYN Timeout)时间
    • 增加最大半连接数
    • 过滤网关防护
    • SYN cookies技术

tcp keep alive

TCP KeepAlive 的基本原理是,隔一段时间给连接对端发送一个探测包,如果收到对方回应的 ACK,则认为连接还是存活的,在超过一定重试次数之后还是没有收到对方的回应,则丢弃该 TCP 连接。

拥塞控制

TCP拥塞控制是TCP协议中的一个关键特性,它可以帮助确保在不同网络条件下实现高效、可靠的数据传输。TCP拥塞控制主要通过以下几个算法实现:

  1. 慢启动(Slow Start): 慢启动算法在连接建立时,将拥塞窗口(cwnd)设置为一个较小的值(通常为MSS,最大报文段长度)。随后,在每个往返时间(RTT)内,拥塞窗口大小按指数增长(每收到一个ACK,cwnd加1)。这样,数据传输速率会逐渐加快,直到达到拥塞阈值(ssthresh)或发生丢包。
  2. 拥塞避免(Congestion Avoidance): 当拥塞窗口大小达到拥塞阈值时,TCP进入拥塞避免阶段。在此阶段,拥塞窗口大小的增长速率减缓,采用加法增长(每经过一个RTT,cwnd加1)。这样可以使传输速率更稳定地增长,减少因拥塞而导致的丢包。
  3. 快速重传(Fast Retransmit): 当接收端收到一个失序的报文段时,它会立即发送重复确认(Duplicate ACK)给发送端。如果发送端连续收到三个重复确认,它会认为该报文段已丢失,而不再等待超时重传定时器到期。此时,发送端会立即重传丢失的报文段,提高数据传输的可靠性和效率。
  4. 快速恢复(Fast Recovery): 快速恢复算法是在快速重传后执行的。它的目的是在恢复丢失的报文段后,尽可能快地恢复传输速率。在快速恢复阶段,发送端会将拥塞阈值减半,并将拥塞窗口设置为新的阈值加上3个报文段大小(即cwnd = ssthresh + 3 * MSS)。然后,发送端进入拥塞避免阶段,使传输速率逐渐恢复。

上述算法共同组成了TCP拥塞控制的基本框架。随着网络技术的发展,还有一些改进的拥塞控制算法,如TCP NewReno、TCP Vegas和TCP BBR等。这些算法在原有基础上进行优化,以适应不同网络环境和应用场景的需求。

慢启动,默认cwnd=1,然后在每个传输轮次(即接受到服务端返回的ack后,刚好一个RTT的时间)都2的x次幂增长,直到阈值或者阻塞

拥塞避免,则每个传输伦茨cwnd++

网络拥塞,先设置 阈值=当前cwnd/2,然后cwnd被重置为1

image-20230502003134264

例题:

假设TCP拥塞控制算法中,慢开始SST的初始阈值设置为8,当拥塞窗口上升到12时,发送端检测出超时,TCP使用慢开始与拥塞避免。求第1次到第13次传输的拥塞窗口cwnd分别为多少?

第一次传输,cwnd = 1
第二次传输,cwnd = 2
第三次传输,cwnd = 4
第四次传输,cwnd = 8
第五次传输,cwnd = 9
第六次传输,cwnd = 10
第七次传输,cwnd = 11
第八次传输,cwnd = 12
第九次传输,cwnd = 1
第十次传输,cwnd = 2
第十一次传输,cwnd = 4
第十二次传输,cwnd = 6
第十三次传输,cwnd = 7

快恢复和快重传

image-20230502003951572

快恢复: A 发送5个报文 给 B,但是B 收不到第2个,于是后面发送的返回包都是第一个报文的seq+1的序列号,也就是说服务端会收到多个重复的第一个报文的确认报文,当收到3个相同确认报文时,就不等待超时计时器到时,而直接发送请求不到的数据包,并且阈值 = cwnd/2

快重传:从阈值 = cwnd/2 开始加法上升

流量控制

流量控制和拥塞控制的区别:

流量控制点对点,拥塞控制多对一

流量控制是单个tcp传输的问题,拥塞则是数据通路上全局的问题

tcp 报文格式

image-20230502103526376

红色比较重要

image-20230502104431064

Http 互联网

url

又称统一资源定位符

<协议>://<主机>:<端口>/<路径>

http

经典面试题:输入Url到返回一个浏览器界面的过程?(天龙八部)

image-20230503124102673

持久连接和非持久连接(keep alive, closed)

image-20230503125110191

返回报文的状态码

  • 1** - 信息,服务器收到请求,需要请求者继续执行操作
  • 2** - 成功
  • 3** - 重定向
  • 4** - 客户端错误,请求包含语法错误或无法完成请求
  • 5** - 服务器错误,服务器在处理请求的过程中发生了错误

tls/ssl

tls握手:

客户端 服务端

clienthello

--随机数-加密套件 -》

​ server hello

​ 《--- 随机数 选择的加密方式 证书

​ 《------公钥

公钥加密自己生成的预主密钥--》

​ 《---私钥解密得到预主密钥

对此加密,密钥为预主密钥,方式为选中的加密套件

ssh

ssh 密码登录原理,ssh 公钥登录原理:

密码口令登录

  通过密码进行登录,主要流程为:

    1、客户端连接上服务器之后,服务器把自己的公钥传给客户端

    2、客户端输入服务器密码通过公钥加密之后传给服务器

    3、服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录

  公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:

    1、客户端生成RSA公钥和私钥

    2、客户端将自己的公钥存放到服务器

    3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端

    4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器

    5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

邮件系统

发送邮件使用smtp协议

读取邮件使用POP3,IMAP协议

tcp连接端口号是25

tcp,smtp连接过程

1 连接建立

2 邮件发送

3 连接释放

image-20230503172412260

举例

└─$ swaks --body "请您于5月1号前往农行录取遗产" --header "Subject:【中国*********村镇银行】通知" -t tx2878160nazhong2@163.com -f money@*******.com
=== Trying 163mx03.mxmail.netease.com:25...
=== Connected to 163mx03.mxmail.netease.com.
<-  220 163.com Anti-spam GT for Coremail System (163com[20141201])
 -> EHLO LAPTOP-2SBFV1AP.localdomain
<-  250-mail
<-  250-PIPELINING
<-  250-AUTH LOGIN PLAIN
<-  250-AUTH=LOGIN PLAIN
<-  250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UryFDSGUCa0xDrUUUUj
<-  250-STARTTLS
<-  250-SIZE 73400320
<-  250 8BITMIME
 -> MAIL FROM:<money@*******.com>
<-  250 Mail OK
 -> RCPT TO:<tx2878160nazhong2@163.com>
<-  250 Mail OK
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Wed, 03 May 2023 17:20:39 +0800
 -> To: tx2878160nazhong2@163.com
 -> From: money@*******.com
 -> Subject:【中国农业银行同安村镇银行】通知
 -> Message-Id: <20230503172039.000018@LAPTOP-2SBFV1AP.localdomain>
 -> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
 ->
 -> 请您于5月1号前往农行录取遗产
 ->
 ->
 -> .
<-  250 Mail OK queued as zwqz-mx-mta-g2-0,_____wBXLrtoJ1Jkw51wAg--.35618S2 1683105642
 -> QUIT
<-  221 Bye
=== Connection closed with remote host.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇