国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI(开放系统互联)模型。要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准进行层次划分,每一层次解决一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络协议。TCP/IP是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层。 那么TCP/IP协议和OSI模型有什么区别呢?OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI 模型,但是并没有严格按照OSI规定的七层去划分标准,而只划分了四层。学习计算机网络原理的时候往往用的是五层协议的体系结构 : 物理层, 数据链路层, 网络层, 传输层和应用层。
计算机的世界里只有0和1, 正如你现在所看这篇文章的文字, 存储在计算机中也是一大串0和1的组合. 但是这些数字不能在真实的物理介质中传输的, 而需要把它转换为光信号或者电信号, 所以这一层负责将这些比特流(0101)与光电信号进行转换.如果没有物理层, 那么也就不存在互联网, 不存在数据的共享, 因为数据无法在网络中流动.
数据在这一层不再是以比特流的形式传输, 而是分割成一个一个的帧再进行传输.网桥工作在数据链路层, 根据MAC帧的目的地址对收到的帧进行转发和过滤.
MAC地址 ,又称计算机的硬件地址, 被固化在适配器(网卡)ROM上的占48位的地址. MAC地址可以用来唯一区别一台计算机, 因为它在全球是独一无二的.
分组交换 ,由于数据在这次曾要被分割成一个一个的帧, 由于不同的链路规定了不同的最大帧长, 即MTU(最大传输单元), 凡是超出这个MTU的帧都必须被分块. 例如一台货车一次能运输5吨的货物, 而有条公路限载重2吨, 那么你只好分3次运输.
如果只有数据链路层没有网络层, 数据就只能在同一条链路上传输, 不能跨链路传输. 有了网络层, 数据便能跨域不同的数据链路传输.在网络层, 数据是以IP数据报(IP分组)的形式传输的。
IP地址和MAC地址:
网络层以上使用IP地址, 数据链路层以下使用MAC地址
IP地址是逻辑地址, MAC地址是物理地址
IP分组中首部的源地址和目的地址在传输中不会改变, MAC帧中首部的源 地址和目的地址每到一个路由器会改变一次
划分子网之后的IP地址
IP地址 = {<网络号>, <子网号>, <主机号>}
例如某单位拥有一个B类IP地址, 145.13.0.0, 但凡目的地址为145.13.x.x的数据报都会被送到这个网络上的路由器R.
内部划分子网后变成 : 145.13.3.0, 145.13.7.0, 145.13.21.0. 但是对外仍表现为一个网络,
即145.13.0.0. 这样路由器R收到报文后, 再根据目的地址发到对应的子网
这一层主要重点是两个协议 : UDP 和 TCP
TCP三次握手
Q : 为什么要三次握手, 两次不可以吗?
A : 试想一下, A第一次发送请求连接, 但是在网络某节点滞留了, A超时重传, 然后这一次一切正常, A跟B就愉快地进行数据传输了.
等到连接释放了以后, 那个迷失了的连接请求突然到了B那, 如果是两次握手的话, B发送确认, 它们就算是建立起了连接了.
事实上A并不会理会这个确认, 因为我压根没有要传数据啊. 但是B却傻傻地以为有数据要来, 苦苦等待. 结果就是造成资源的浪费.更加接地气的解释就是 : A打电话给B
第一次握手 : 你好, 我是A, 你能听到我说话吗
第二次握手 : 听到了, 我是B, 你能听到我说话吗
第三次握手 : 听到了,我们可以开始聊天了三次握手其实就是为了检测双方的发送和接收能力是否正常
TCP四次挥手
更加接地气的解释 :
第一次挥手 : A告诉B, 我没数据发了, 准备关闭连接了, 你要发送数据吗
第二次挥手 : B发送最后的数据
第三次挥手 : B告诉A, 我也要关闭连接了
第四次挥手 : A告诉B你可以关闭了, 我这边也关闭了
TCP的优点:
可靠,稳定
TCP的缺点:
慢,效率低,占用系统资源高,易被攻击
TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。
UDP的优点:
快,比TCP稍安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以他在传递数据时非常快
UDP的缺点:
不可靠,不稳定,如果网络不好,很容易丢包
什么时候使用TCP
整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
什么时候使用UDP
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
应用层协议最著名的就是HTTP, FTP了, 还有一个重要的DNS
DNS 能将域名(例如, www.jianshu.com)解析成IP地址.
DNS查询
主机向本地域名服务器的查询一般都是采用递归查询 本地域名服务器向根域名服务器的查询通常是采用迭代查询 递归查询 : B问A广州怎么去,
A不知道, A就问C, C不知道就问D…直到知道了再一层一层转告直到A告诉B. 迭代查询 : B问A广州怎么去, A不知道,
A就告诉你可以去问C, 然后B就去问C, C不知道, C就告诉你可以去问D, 然后B就去问D…直到B知道为止
HTTP协议
HTTP是面向事务的, 即它传输的数据是一个整体, 要么全部收到, 要么全部收不到.
万维网的工作过程
每一次HTTP请求就需要建立一次TCP连接和释放TCP连接.
HTTP是无连接, 无状态的. 每一次请求都是作为一次新请求.
HTTP/1.0 缺点 : 无连接, 每一次请求都要重新建立TCP连接, 所以每一次HTTP请求都要花费2倍RTT时间(一次TCP请求,
一次HTTP请求)HTTP/1.1 : 使用持续连接, 即保持TCP连接一段时间.
HTTP/1.1持续工作的两种工作方式 : 非流水线方式和流水线方式
非流水线方式 : 收到一个请求的响应再发下一个请求, 效率低, 浪费资源
流水线方式 : 能够同时发送多个请求, 效率高
HTTP的GET和POST
GET 请求通常用于查询、获取数据,而 POST 请求则用于发送数据 GET 请求的参数在URL中, 因此绝不能用GET请求传输敏感数据,
而POST 请求的参数在请求头中, 安全性略高于GET请求ps : POST请求的数据也是以明文的形式存放在请求头中, 因此也不安全
Cookie
万维网使用Cookie来跟踪用户, 表示HTTP服务器和用户之间传递的状态信息.
Cookie工作原理 :
- 用户浏览某网站, 该网站的服务器为用户产生一个唯一的识别码, 并以此为索引在服务器后端数据库中产生一个项目
- 返回给用户的HTTP响应报文中添加一条 “Set-cookie”, 值为该识别码, 如123
- 用户的浏览器将该cookie保存起来, 在用于继续浏览该网站时发送的每一个HTTP请求都会有一行 Cookie: 123
于是, 这个网站就知道Cookie为123的这个用户做了什么, 为这个用户维护一个独立的列表(如购物车) 当然, Cookie是把双刃剑,
方便的同时也带有危险性, 例如隐私泄露等, 用户可以自行决定是否使用Cookie
Session
Cookie是保存在客户端上的, 而Session是保存在服务器中. 当服务器收到用户发出的Cookie时,
会根据Cookie中的SessionID来查找对应的Session, 如没有则会生成一个新的SessionID返回给用户总而言之, Cookie和Session就是同一样东西存放地方不同而已.
HTTPS协议
HTTPS协议在HTTP协议的基础上, 在HTTP和TCP中间加入了一层SSL/TLS加密层, 解决了HTTP不安全的问题: 冒充, 篡改,
窃听三大风险.