一、计算机网络体系结构
二、物理层
1. 物理层主要任务
物理层考虑的是怎样才能在连接各台计算机的传输媒体上传输数据的比特流,确定与传输媒体的接口有关的特性:
- 机械特性(引线数目等)
- 电气特性(电压高低,阻抗匹配)
- 功能特性(某一电平的电压表示何种意义)
2. 传输方式
- 电路交换:专用的物理通信路径
- 报文交换
- 分组交换
- 虚电路
- 数据报
三、数据链路层
1. 数据链路层任务
为网络层提供可靠的数据传输、链路管理、帧定界、帧同步与透明传输、流量控制和差错控制。
2. 基本数据单位
帧
3. 主要的协议
以太网协议
四、网络层
1. 网络层任务
实现异构网络互联、路由与转发、拥塞控制。
2. IPv4地址分类
- 主机号全为1,表示本网络上的广播地址,不用作主机的IP地址
- 主机号全为0,表示本网络本身,不用作主机的IP地址。
3. IP协议(网际协议)
IP协议族包含配套的协议:
- ARP(地址解析协议):将IP地址转换为MAC地址。
- ICMP(网际控制报文协议):给主机和路由器报告差错和异常情况,分为询问报文和差错报文。
4. 路由选择协议
- 内部网关协议(IGP):
- RIP:与相邻路由器交换整个路由表
- OSPF:与全部路由器交换相邻节点链路状态
- 外部网关协议(EGP):
- BGP:寻找的并非最佳路由。路由更新时,BGP只发送更新的路由。
五、传输层
传输层任务
提供进程之间的端到端的逻辑通讯、差错检测、UDP与TCP。
UDP
无连接尽最大努力交付,支持广播和多播(而TCP不支持)
TCP
有连接、一对一、可靠、全双工通信
TCP的三次握手建立
- 第一步:客户机的TCP首先向服务器的TCP发送一个请求报文段,这个特殊报文段不包含应用层数据,其SYN位置为1。另外,客户机会随机选择一个起始序号
seq = x
(连接请求报文不携带数据,但要消耗一个序号) - 第二步:服务器收到请求报文后,若同意连接,则向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文中,SYN和ACK都置为1,确认号字段的值为
x + 1
,并且服务器随机产生起始序号seq = y
(确认报文不携带数据,但也要消耗一个序号)。 - 第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文的ACK为置为1,序号字段为
x + 1
,确认号字段为ack = y + 1
TCP四次挥手释放
- 第一步:客户机打算关闭连接时,发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文字段的FIN被置为1,
seq = u
,它等于前面已经传送过的数据的最后一个字节序号加1(FIN报文段不携带数据,但也要消耗一个序号)。TCP是全双工的,即可以想象为一条TCP连接上有两条数据通路。发送FIN报文时,发送FIN的一端不能再发送数据,即关闭了其中一条数据通路,单对方还可以发送数据。 - 第二步:服务器收到连接释放报文段后即发出确认,确认号是
ack = u + 1
,而这个报文段自己的序号是v,等于它前面已经传送过的数据的最后一个字节序号加1。此时客户端到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。 - 第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时发出
FIN = 1
的连接释放报文段。 - 第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK位被置为1,确认序号
ack = w + 1
, 报文序号seq = u + 1
。此时TCP连接还未释放,必须经过时间等待计时器设置的时2MSL后,客户机才进入连接关闭状态。
注:为什么要等待2SML?
- 如果客户机不等待2SML,若客户机返回的最后确认报文已丢失,则服务器不能进入正常关闭状态,而此时客户机已经关闭,也不可能再重传。
- 客户机在发送最后一个确认报文后,再经过2MSL才可以保证本连接持续时间内所产生的所有报文段从网络中消失。
SYN攻击
三次握手中,服务器发送SYN-ACK后等待客户端发送ACK,此时服务器处于SYN-RCVD状态。SYN攻击指的是在短时间内伪造大量不存在的IP地址,向服务器不断发送SYN数据段,服务此时会回复确认包,由于源地址不存在,服务器需要不断的重传直至超时,这些伪造的SYN长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢。
防御SYN攻击可以使用:
- 缩短超时时间
- 增大最大半连接数
- 过滤网关
TCP可靠传输机制
- 序号
- 确认
- 重传
TCP流量控制
滑动窗口机制
TCP拥塞控制
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
TCP KeepAlive
当TCP连接中一方出现掉电、死机等异常情况时,TCP连接未来得及正常释放,连接的另一方并不知道这个问题,会一直维护这个连接,造成系统资源的浪费。可以在传输层利用TCP的KeepAlive机制。
TCP KeepAlive基本原理是隔一段时间给对方发一个探测包,如果对方收到回应并发送ACK,则认为连接存活,否则在重试次数还没收到回应,则丢弃该TCP连接。
六、应用层
1. 应用层协议服务器熟知端口
HTTP:80
DNS:53
FTP:控制链接端口21,数据链接端口20
STMP:25
POP3:110
2. HTTP协议
(1)报文结构
HTTP请求报文和响应报文的区别是开始行不同。
请求报文
- 请求方法:
- POST(传输实体主体)
- GET(获取资源)
- HEAD(获得报文的首部,它和GET方法一样,只是不返回报文主体部分)
- OPTIONS(询问支持的方法)
- CONNECT(要求用隧道协议连接代理服务器)
- 请求头部
- Connection:该字段为Close表示使用非持续连接,为Keep-Alive表示持续连接(默认)。
- Cookie:由服务器生成,由客户端保存
- Content-Type:用于表明发送数据流的类型和网页的编码,multipart/form-data(表单)
- Transfer-Ecoding:传输报文主体时采用的编码方式
响应报文
- 状态码
- 1XX:信息性状态码(如:接收到请求正在处理)
- 2XX:成功
- 3XX:重定向
- 4XX:客户端错误
- 5XX:服务器错误
- 请求头部
- Location:一般该字段配合3XX:Redirection的响应,提供重定向的URI。
(2)HTTPS
HTTP通信使用明文内容可能被窃听;不验证通信方的身份;无法证明报文的完整性。HTTPS添加了加密和认证机制:
- HTTPS通信部分接口使用SSL和TSL协议。
- 加密:使用混合加密方式,在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段使用共享密钥加密方式。
- 认证:使用由数字证书认证机构(CA)和其相关机关颁发的公开密钥证书。
- HTTPS比HTTP慢2到10倍。
(3)JSON
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
- {} 双括号表示对象
- [] 中括号表示数组
- "" 双引号内是键或值
- JSON能够处理的数据类型有false/null/true/对象/数组/字符串这7种类型
- 不管是键或值最好都用双引号引起来
(4)HTTP2.0
HTTP2.0和HTTP1.1的区别
- 使用多路复用:多个请求可以在同一个连接中并行执行(不像HTTP1.1中的一个连接需要等待上一个请求完毕才能请求下一个)
- Header压缩:降低传输头部产生的流量。
- 服务端推送:服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。
HTTP1.0和HTTP1.1的区别
- 长连接:在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。默认开启keep-alive。
- 允许只请求资源的某个部分:在请求头引入了range域,允许只请求资源的某个部分。
- 引入了更多的缓存控制策略。
3. URI和URL
- URI(统一资源标识符):某个协议类型表示的资源的定位标识符,如:
file://ftp.linkwan.com/ (也是URL)
http://homepage.yesky.com/175/2603675.html (也是URL)
tel:+1-816-555-1212 (这个就不是URL啦)
- URL(统一资源定位符)
- URI用来标识某一互联网资源,而URL用来表示资源在互联网上所处的位置。可见URL是URI的子集。
4. Socket编程
Socket是对TCP/IP协议族的一种封装,是应用层与TCP/IP协议族通信的中间软件的抽象层。利用三元组(ip地址,协议,端口)就可以唯一标识网络中的进程。
一个简易的 Server 的流程如下:
- 1.建立连接,接受一个客户端连接。
- 2.接受请求,从网络中读取一条 HTTP 请求报文。
- 3.处理请求,访问资源。
- 4.构建响应,创建带有 header 的 HTTP 响应报文。
- 5.发送响应,传给客户端。
5. 浏览器输入 url 到页面显示的过程
- DNS解析:网址到IP地址的转换。
- TCP连接:HTTP使用TCP作为传输层协议。
- 服务器处理请求并返回HTTP报文。
- 浏览器解析渲染页面。
推荐一个链接:计算机网络基础知识总结