计算机编程基础_计算机网络
[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个字节,支持未来的拓展
可靠传输的基本原理
停止等待协议
是简单的可靠传输协议,但是对信道的利用率不高
无差错情况下:
对于发送方来说,发送消息之后就会等待接收方的应答消息而后才继续发送消息。
对于接收方来说,没有收到消息就处于等待阶段,直到收到消息然后作出应答。
有差错情况下(通过超时重传来保证可靠传输)
对于发送方来说,发送消息之后可能会丢失,因此超过一定时间未收到应答消息,就重新发送(超时重传)
对于接收方来说,发出的应答消息可能会丢失或者很久之后才被请求方收到,因此超过一定时间未收到新的请求消息,就重新发送应答消息(超时重传)
超时重传是通过超时定时器来判断等待是否超时的
差错的情况有:
发送的消息在路上丢失了
确认的消息在路上丢失了
确认的消息很久才到
连续ARQ(Automatic Repeat reQuest:自动重传请求)协议
利用滑动窗口批量发送和确认数据,并采用累计确认消息
TCP协议的可靠传输
TCP的可靠传输基于连续ARQ协议,TCP的滑动窗口以字节为单位。
流量控制考虑的是点对点的通信量的控制
选择重传需要指定需要重传的字节(存储在TCP选项中),每一个字节都有唯一的32位序列号。
TCP协议的流量控制
流量控制指让发送方发送速率不要太快,是基于滑动窗口实现的
待窗口为0时将会为发送方再分配一个窗口配额,如果新的配额在同步给发送方的路上丢失,那么就会造成死锁(因为接收方已经分配了新的窗口配额给发送方,那么将会一直等待新的请求;而请求方记录的窗口配置为0了,则一直在等待接收方分配配额)。解决方法是使用坚持定时器
坚持定时器
当接收到窗口为0的消息,则启动坚持定时器
坚持定时器每隔一段时间发送一个窗口探测报文(询问窗口配额有没有调大)
TCP协议的拥塞控制
当网络对硬件设备的性能要求大于可用资源时就会发生拥塞。一条链路经过非常多的设备,数据链路中各个部分都有可能成为网络传输的瓶颈。
流量控制考虑点对点的通信量的控制
拥塞控制考虑整个网络,是全局性的考虑
报文超时有可能是因为拥塞(当然超时也可能是网络出现故障等)
拥塞控制用来调节网络的负载
接收方网络资源繁忙,因未及时响应ACK导致发送方重传大量数据,将是的网络更加拥堵。拥塞控制可以动态调整窗口大小,不只是依赖缓冲区大小确定窗口。
慢启动和拥塞避免
慢启动算法
由小到大逐渐增加发送的数据量
每收到一个报文确认,就加一
发送数据是指数增长的(1,2,4,8,16...),直到增长到慢启动阈值,增长到阈值就不增长了
拥塞避免算法
维护一个拥塞窗口的变量
只要网络不拥塞,就试探着将拥塞窗口调大
结合慢启动算法,可以得到1,2,4,8,16,17,18,19...
在慢启动阶段从1开始以2倍扩大的方式指数增长至慢启动阈值,接着进入拥塞避免加法增大(每次增大1),如果遇到网络拥塞的情况则会直接将窗口置为1,慢启动阈值置为原来的一般,继续进入慢启动阶段。
快速重传和快速恢复
最开始仍然采用慢启动和拥塞避免算法。不同的是在收到3个重复ACK执行快重传,快重传(乘法减小)是将拥塞窗口降为原来的一半,将拥塞避免的阈值也降为原来的一半,接着进入快速恢复阶段。快速恢复对数据进行重传,重传完毕后,进入拥塞避免(加法增大)。
TCP三次握手(建立连接)
为什么发送方要发出第三个确认报文呢?为什么两次握手不行呢?
避免已经失效的连接请求报文传送到对方,引起错误
第一次发送的链接请求由于耗时过长变成了失效的请求报文
如果采用两次握手就建立起连接,那么将会重复建立连接
通过第三次握手来避免重复建立连接,在发送方再次收到同一连接请求消息的应答时将忽略。
TCP四次挥手(释放连接)
等待计时器
等待计时器等待2倍最长报文段寿命(MSL:Max Segment Lifetime),建议设置MSL为2分钟。
为什么需要等待计时器(为什么需要等待2MSL)
最后一个报文没有确认,为了确保发送方的ACK可以到达接收方,2MSL时间内没有收到,则接收方会重发。
确保当前连接的所有报文都已经过期。
应用层
DNS
DNS(Domain Name System)域名系统
解析域名获得IP
DHCP协议
DHCP(动态主机设置协议),是一个局域网协议,监听默认端口为67。
DHCP是应用UDP协议的应用层协议。
DHCP主要是为局域网中的设备分配一个临时IP,在租期内可用
主机使用UDP协议广播DHCP发现报文
DHCP服务器发出DHCP提供报文
主机向DHCP服务器发出DHCP请求报文
DHCP服务器回应并提供IP地址
HTTP协议
HTTP(超文本传输协议)是可靠的数据传输协议
超文本(超级文本)是带超链接的文本
HTTP请求方法
GET:获取指定资源
POST:提交数据到服务端
DELETE:删除指定的服务端资源
PUT:更新指定的服务端资源
HTTP请求报文
第一行:请求方法、请求地址、HTTP版本
第二行:请求头
第三行:请求内容
实例:
HTTP应答报文
第一行:HTTP版本、状态码、状态解释
第二行:应答头
第三行:应答内容
状态码
200~299: 成功状态码
300~399: 重定向状态码
400~499: 客户端错误状态码
500~599: 服务端错误状态码
Web缓存
主要涉及对热点数据的缓存。可以使用如Redis等组件进行缓存。
Web代理
正向代理:代理主要代表客户端去访问后端Server
反向代理:代理主要代表服务端处理客户端请求将数据返回。
常用Web反向代理软件:Nginx
CDN(内容分发网络)
CDN(Content Delivery Network)内容分发网络主要目的是为了给多媒体内容加速。
当访问的资源目的地物理距离较远时,通常将该资源备份一份到附近,通过减少物理距离等方式来提高访问速读。
爬虫
通过网络机器人(爬虫)获取网页信息时:
增加网络拥塞
损耗服务器资源
HTTPS协议
HTTP协议是明文传输的,可能会造成个人的敏感信息泄漏。
HTTPS是安全的HTTP协议(HTTP+SSL)
加密
对称加密:加解密的密钥一致
非对称加密:加密(公钥)和解密(私钥)的密钥不一致,但是两个密钥是拥有一定数学关系的一组密钥,相互不可分离。
数字证书
数字证书是可信任组织颁发给特定对象的认证
SSL(安全套接层)
保护数据安全和数据完整;对传输层数据进行加密后传输。
HTTPS通信
客户端通过端口443同服务端进行TCP连接
SSL安全参数握手
客户端发出请求(发送数据)
服务端响应请求(发送数据)
SSL安全参数握手
综合使用了对称加密和非对称加密,在传输过程中使用的是非对称加密,完成握手后使用对称加密进行加解密。完成握手后双方分别生产密钥,没有经过传输,减少了密钥泄露的可能性。
客户端生成一个
随机数a
同协议版本、加密算法发送给服务端服务端确认加密算法,将数字证书以及生成的
随机数b
发送给客户端客户端确认证书是否有效,生成
随机数c
,然后使用服务器的公钥加密随机数c
(只有服务器可以解密出随机数c)客户端、服务端根据随机数a、b、c以及之前约定的加密算法生成对称密钥。
最后更新于
这有帮助吗?