计算机编程基础_计算机网络

[TOC]

传输层

传输层管理端到端的通信连接,用于解决多机进程与进程间的通信

使用端口(port)来标记不同的网络进程,使用16比特位表示(0~65535),常用端口:

应用

端口

FTP

22

HTTP

80

HTTPS

443

DNS

53

TELNET

23

UDP协议

UDP(User Datagram Protocol)用户数据报协议

UDP协议不会对传输的数据报协议进行合并或拆分,会直接将数据报封装到协议中

UDP是无连接协议,UDP传输时不可靠的(数据可能会丢失),是面向报文(数据报)传输的(就是说UDP协议会直接将数据报封装到协议中),UDP没有拥塞控制,UDP首部开销很小。

TCP协议

TCP(Transmission Control Protocol)传输控制协议

TCP是面向连接的协议,TCP的一个连接有两个端点(点对点通信),TCP提供可靠的数据传输,TCP协议提供全双工的通信,是面向字节流的协议(可能会将数据报进行分割或合并而后传输),

序号

序号是数据首字节序号,范围为0~(1<<32)-1,一个字节一个序列号。

确认号

确认号是期望收到数据的首字节序号,范围为0~(1<<32)-1,一个字节一个序列号。

如果确认号为N,则表示N-1序号的数据都已经收到了。

数据偏移

数据偏移是数据偏离首部的距离,占4位(0~(1<<15-1))【单位为:32位】,TCP首部范围为20~60字节。

TCP标记

标记

含义

URG(Urgent)

紧急位,URG=1表示紧急数据

ACK(Acknowledgement)

确认位,ACK=1表示确认号才生效

PSH(Push)

推送位,PSH=1表示要尽快地把数据交付给应用层

RST(Reset)

重置位,RST=1表示重新建立连接

SYN(Synchronization)

同步位,SYN=1表示连接请求报文

FIN(Finish)

终止位,FIN=1表示释放连接

窗口

窗口指明允许对方发送的数据量,占16位(0~(1<<16-1))

校验和

紧急指针

紧急数据URG=1

指定紧急数据在报文的数据

TCP选项

最多40个字节,支持未来的拓展

可靠传输的基本原理

停止等待协议

是简单的可靠传输协议,但是对信道的利用率不高

无差错情况下

  1. 对于发送方来说,发送消息之后就会等待接收方的应答消息而后才继续发送消息。

  2. 对于接收方来说,没有收到消息就处于等待阶段,直到收到消息然后作出应答。

有差错情况下(通过超时重传来保证可靠传输)

  1. 对于发送方来说,发送消息之后可能会丢失,因此超过一定时间未收到应答消息,就重新发送(超时重传)

  2. 对于接收方来说,发出的应答消息可能会丢失或者很久之后才被请求方收到,因此超过一定时间未收到新的请求消息,就重新发送应答消息(超时重传)

超时重传是通过超时定时器来判断等待是否超时的

差错的情况有:

  1. 发送的消息在路上丢失了

  2. 确认的消息在路上丢失了

  3. 确认的消息很久才到

连续ARQ(Automatic Repeat reQuest:自动重传请求)协议

利用滑动窗口批量发送和确认数据,并采用累计确认消息

TCP协议的可靠传输

TCP的可靠传输基于连续ARQ协议,TCP的滑动窗口以字节为单位。

流量控制考虑的是点对点的通信量的控制

选择重传需要指定需要重传的字节(存储在TCP选项中),每一个字节都有唯一的32位序列号。

TCP协议的流量控制

流量控制指让发送方发送速率不要太快,是基于滑动窗口实现的

image-20201011232403190

待窗口为0时将会为发送方再分配一个窗口配额,如果新的配额在同步给发送方的路上丢失,那么就会造成死锁(因为接收方已经分配了新的窗口配额给发送方,那么将会一直等待新的请求;而请求方记录的窗口配置为0了,则一直在等待接收方分配配额)。解决方法是使用坚持定时器

image-20201011232620357

坚持定时器

  1. 当接收到窗口为0的消息,则启动坚持定时器

  2. 坚持定时器每隔一段时间发送一个窗口探测报文(询问窗口配额有没有调大)

TCP协议的拥塞控制

当网络对硬件设备的性能要求大于可用资源时就会发生拥塞。一条链路经过非常多的设备,数据链路中各个部分都有可能成为网络传输的瓶颈。

流量控制考虑点对点的通信量的控制

拥塞控制考虑整个网络,是全局性的考虑

报文超时有可能是因为拥塞(当然超时也可能是网络出现故障等)

拥塞控制用来调节网络的负载

接收方网络资源繁忙,因未及时响应ACK导致发送方重传大量数据,将是的网络更加拥堵。拥塞控制可以动态调整窗口大小,不只是依赖缓冲区大小确定窗口。

慢启动和拥塞避免

慢启动算法

  1. 由小到大逐渐增加发送的数据量

  2. 每收到一个报文确认,就加一

发送数据是指数增长的(1,2,4,8,16...),直到增长到慢启动阈值,增长到阈值就不增长了

拥塞避免算法

  1. 维护一个拥塞窗口的变量

  2. 只要网络不拥塞,就试探着将拥塞窗口调大

结合慢启动算法,可以得到1,2,4,8,16,17,18,19...

image-20201014203306434

在慢启动阶段从1开始以2倍扩大的方式指数增长至慢启动阈值,接着进入拥塞避免加法增大(每次增大1),如果遇到网络拥塞的情况则会直接将窗口置为1,慢启动阈值置为原来的一般,继续进入慢启动阶段。

快速重传和快速恢复

image-20201014203836336

最开始仍然采用慢启动和拥塞避免算法。不同的是在收到3个重复ACK执行快重传,快重传(乘法减小)是将拥塞窗口降为原来的一半,将拥塞避免的阈值也降为原来的一半,接着进入快速恢复阶段。快速恢复对数据进行重传,重传完毕后,进入拥塞避免(加法增大)。

TCP三次握手(建立连接)

为什么发送方要发出第三个确认报文呢?为什么两次握手不行呢?

避免已经失效的连接请求报文传送到对方,引起错误

第一次发送的链接请求由于耗时过长变成了失效的请求报文

image-20201012000924582

如果采用两次握手就建立起连接,那么将会重复建立连接

image-20201012001142422

通过第三次握手来避免重复建立连接,在发送方再次收到同一连接请求消息的应答时将忽略。

image-20201012001458711

TCP四次挥手(释放连接)

image-20201012002206128

等待计时器

等待计时器等待2倍最长报文段寿命(MSL:Max Segment Lifetime),建议设置MSL为2分钟。

为什么需要等待计时器(为什么需要等待2MSL)

最后一个报文没有确认,为了确保发送方的ACK可以到达接收方,2MSL时间内没有收到,则接收方会重发。

确保当前连接的所有报文都已经过期。

应用层

DNS

DNS(Domain Name System)域名系统

解析域名获得IP

DHCP协议

DHCP(动态主机设置协议),是一个局域网协议,监听默认端口为67。

DHCP是应用UDP协议的应用层协议。

DHCP主要是为局域网中的设备分配一个临时IP,在租期内可用

  1. 主机使用UDP协议广播DHCP发现报文

  2. DHCP服务器发出DHCP提供报文

  3. 主机向DHCP服务器发出DHCP请求报文

  4. DHCP服务器回应并提供IP地址

HTTP协议

HTTP(超文本传输协议)是可靠的数据传输协议

超文本(超级文本)是带超链接的文本

HTTP请求方法

  1. GET:获取指定资源

  2. POST:提交数据到服务端

  3. DELETE:删除指定的服务端资源

  4. PUT:更新指定的服务端资源

HTTP请求报文

  1. 第一行:请求方法、请求地址、HTTP版本

  2. 第二行:请求头

  3. 第三行:请求内容

实例:

POST https://1005281342.gitbook.io  HTTP/1.1

Accept-Encoding:gzip;Accept-Language:zh-CN

{
    "key": "value"
}

HTTP应答报文

  1. 第一行:HTTP版本、状态码、状态解释

  2. 第二行:应答头

  3. 第三行:应答内容

状态码

200~299: 成功状态码

300~399: 重定向状态码

400~499: 客户端错误状态码

500~599: 服务端错误状态码

Web缓存

主要涉及对热点数据的缓存。可以使用如Redis等组件进行缓存。

Web代理

正向代理:代理主要代表客户端去访问后端Server

image-20201013044651008

反向代理:代理主要代表服务端处理客户端请求将数据返回。

image-20201013044900037

常用Web反向代理软件:Nginx

CDN(内容分发网络)

CDN(Content Delivery Network)内容分发网络主要目的是为了给多媒体内容加速。

当访问的资源目的地物理距离较远时,通常将该资源备份一份到附近,通过减少物理距离等方式来提高访问速读。

爬虫

通过网络机器人(爬虫)获取网页信息时:

  1. 增加网络拥塞

  2. 损耗服务器资源

HTTPS协议

HTTP协议是明文传输的,可能会造成个人的敏感信息泄漏。

HTTPS是安全的HTTP协议(HTTP+SSL)

加密

对称加密:加解密的密钥一致

非对称加密:加密(公钥)和解密(私钥)的密钥不一致,但是两个密钥是拥有一定数学关系的一组密钥,相互不可分离。

数字证书

数字证书是可信任组织颁发给特定对象的认证

SSL(安全套接层)

保护数据安全和数据完整;对传输层数据进行加密后传输。

image-20201013092418948

HTTPS通信

  1. 客户端通过端口443同服务端进行TCP连接

  2. SSL安全参数握手

  3. 客户端发出请求(发送数据)

  4. 服务端响应请求(发送数据)

SSL安全参数握手

综合使用了对称加密和非对称加密,在传输过程中使用的是非对称加密,完成握手后使用对称加密进行加解密。完成握手后双方分别生产密钥,没有经过传输,减少了密钥泄露的可能性。

  1. 客户端生成一个随机数a同协议版本、加密算法发送给服务端

  2. 服务端确认加密算法,将数字证书以及生成的随机数b发送给客户端

  3. 客户端确认证书是否有效,生成随机数c,然后使用服务器的公钥加密随机数c(只有服务器可以解密出随机数c)

  4. 客户端、服务端根据随机数a、b、c以及之前约定的加密算法生成对称密钥。

最后更新于

这有帮助吗?