计算机网络体系结构
结构介绍
计算机网络体系结构分为3种,分别是:OSI体系结构、TCP/IP体系结构、五层体系结构,其中OSI七层体系结构概念清晰、理念完整,但是比较复杂且不实用,TCP/IP体系结构包含了一系列构成互联网基础的网络协议,是Internet的核心协议,被广泛应用于局域网和广域网。
OSI体系结构(7层) | TCP/IP体系结构(4层) | 五层体系结构(5层) |
---|---|---|
应用层 | 应用层 (http) | 应用层 |
表示层 | 运输层(TCP、UDP) | 运输层 |
会话层 | 网际层(IP) | 网络层 |
传输层 | 网络接口层 | 链路层 |
网络层 | 物理层 | |
链路层 | · | |
物理层 |
OSI体系结构中物理层和链路层对应4层中的网络接口层,网络层对应4层中的网际层(IP),传输层代表4层中的运输层,应用层、表示层、会话层代表4层中的应用层(http)。
TCP/IP4层网络体系详解
层级 | 作用 | 传输单位 | 功能 | 具体协议 |
---|---|---|---|---|
网络接口层 | 负责与链路(传输媒介)的数据传输工作 | 帧 | 组帧、差错控制、流量控制和传输管理(无论上层数据包有无丢失&重复,一旦发现错误帧,则丢弃,以免浪费网络) 在广播式网络通过介质访问子层,控制共享信道的访问 |
EIA-232C\CCITT\SDLC\HDLC\PPP\STP |
网际层 | 为不同主机提供通信服务:网络层的分组数据从源端传到目的端 | 数据报 | 封装数据成分组/包、路由选择 流量控制、拥塞控制、差错控制、网际互联 |
IP:提供网络节点之间的报文传送服务\ARP:实现IP地址向物理地址的映射\RARP协议:实现物理地址向IP地址的映射\ICMP:探测、报告传输中产生的错误\IGMP:管理多播组测成员关系\其余:IPX、OSPF |
运输层 | 为不同主机中的进程间提供通信服务 | 报文段(TCP)/用户数据报(UDP) | 为端到端的连接提供可靠的传输服务,为端到端的连接提供流量控制、差错控制、数据传输管理服务 | TCP:面向连接、可靠的报文传输服务/UDP:提供用户间无连接、不可靠的报文传输服务 |
应用层 | 定义应用进程间通信和交互的规则 应用进程指:主机中的运行的程序,交互方式指:基于C/S方式,交互单元的数据单元:报文 | HTTP:INTERNET网浏览服务\DNS协议:负责域名和IP地址的映射\SMTP:邮件发送服务\FTP:应用级文件传输服务\POP:提供对邮箱服务器进行远程存取邮件的服务\Telnet:提供远程登录服务\SSH协议:提供远程登录服务 |
UDP和TCP的区别
名称 | 特点 | 优点 | 缺点 |
---|---|---|---|
UDP(user Datagram Protocol):用户数据报协议 | 无连接:使用UDP传输前,不需要建立UDP连接 不可靠:UDP的数据报发送后,不管其是否会到达接收方 面向报文:数据以数据报文的形式传输 无拥塞控制:由于是不可靠传输,即不管是否到达接收方,故不需拥塞控制 |
速度快 | 消息易丢失(特别网络差的时候) |
TCP(Transmission Control Protocol):传输控制协议 | 面向连接:使用TCP传输数据前,必须先建立TCP连接;传输完成后再释放连接 全双工通信:建立TCP连接后,通信双方都能发送数据 可靠:通过TCP连接传送的数据:不丢失、无差错、不重复、按序到达 面向字节流:数据以流的形式进行传输 |
数据传输可靠 | 效率差(建立连接、发送确认包) |
cookie和session的区别
Cookie:一种客户端机制,它是用于记录下载某个网站上输入的内容,选择(下次打开同一个网站时,WEB服务器会先看看有无上次留下的Cookie资料,若有则依据Cookie里的内容来判断使用者,显示特定的网页内容),应用场景用于提供个人化服务。
cookie原理:通过扩展HTTP协议实现,服务器通过在HTTP的响应头中加上一行特殊的指令以提示。
cookie具体使用:主要内容包括:名字/值/过期时间/路径/域路径与域一起构成cookie的作用范围,若未设置过期时间,浏览器关闭cookie就会消失,这种cookie也被称为“会话cookie”;
Session:一种服务端机制,它使用散列表的结构保存信息,当程序需为某个客户端的请求创建一个session时,服务器首先检查该客户端的请求里是否包含一个session标识(session id),若包含则把其检索出来使用,若不包含,则为此客户端创建一个session,生成一个与此session相关联的session标识(session_id),在交互过程中浏览器可以自动的按照规则吧这个标识发送给服务器,一般这个cookie的名字都是类似于SESSIONID.
类型 | 作用域 | 存储量 | 安全性 | 损耗 | 应用场景 |
---|---|---|---|---|---|
cookie | 客户端浏览器 | 少,单个cookie不超过4k,浏览器限制一个站点最多保存20个cookie | 不安全,cookie存本地 | 低 | 存放设备配置信息 |
session | 服务器 | 多 | 安全 | 高 | 存放重要信息 |
三次握手流程
建立TCP连接之前的三次握手
1.TCP客户端,服务器都处于关闭状态
2.客户端主动打开连接,服务器才被动打开连接,等待接收客户端的请求
过程 | 具体描述 | 报文段信息 | 状态 |
---|---|---|---|
第一次握手 | 客户端向服务器发送一个连接请求的报文段 | 同步标志位设为1:SYN = 1,随机选择一个起始序号:seq=x,不携带数据(因SYN位被设置为1的报文不能携带数据,但是要消耗一个序号) | 客户端进入同步已发送状态(SYN_SEND)等待服务器确认 |
第二次握手 | 服务器收到请求连接报文后,若同意建立连接,则向客户端发起连接确认的报文段(为该TCP连接分配TCP缓存、变量) | 同步标志位设为1:SYN=1,确认标记为设为1:ACK=1,随机选择一个起始序号:seq=Y,确认号字段设为:ack=x+1,不携带数据(原因同上,但是需要消耗一个序号) | 服务器进入同步已接收状态(SYN_RCVD) |
第三次握手 | 客户端收到确认报文段后,向服务器再次发出连接确认报文段(为该TCP连接分配TCP缓存、变量) | 确认表计位设为1:ACK=1,序号:seq=X+1,确认号字段设为:ack=y+1,可携带数据(因SYN没有设为1) | 客户端、服务器端进入已创建状态(可开始发送数据) |
为什么TCP建立连接需要三次握手?
防止服务端因接收了早已失效的连接请求报文,从而一直等待客户端请求,最终导致形成死锁,浪费资源。
四次挥手流程
4次挥手是处于TCP客户端、服务器都处于已创建状态(ESTABLISHED),直到客户端主动关闭TCP连接
过程 | 具体描述 | 报文段信息 | 状态 |
---|---|---|---|
第一次挥手 | 客户端向服务器发送一个连接释放的报文段(停止在发送数据) | 终止控制位设置为1:FIN=1,报文段序号设置前面传送数据最后一个字节的序号加1:seq=u,可携带数据(FIN=1的报文即使不携带数据也消耗1个序号) | 客户端进入终止等待1状态(FIN-WAIT-1)等待服务器确认 |
第二次挥手 | 服务器收到连接释放报文段后,则向客户端发回连接释放确认的报文段 | 确认标记位设为1:ACK=1,报文段序号设为前面传送数据最后一个字节的序号加1:seq=v,确认号字段设为:ack=u+1 | 服务器进入关闭等待状态(CLOSE-WAIT),客户端收到服务器的确认后,进入终止等待2状态(FIN-WAIT-2),等待服务器发出释放连接请求(至此,客户端、服务器TCP已经断开,TCP连接处于半关闭状态,即客户端对服务器断开,但是服务器还未对客户端断开) |
第三次挥手 | 若服务器已无要向客户端发送数据,则发出释放连接的报文段 | 终止控制符设为1:FIN=1,确认标记位设为1:ACK=1,报文段序号seq=w,重复上次已发送的确认号字段设为:ack=u+1,可携带数据(FIN=1的报文即使不携带数据也消耗1个序号) | 服务器端进入最后确认状态(LAST-ACK) |
第四次挥手 | 客户端收到连接释放报文段后,则向服务器发回连接释放确认的报文段 | 确认标记ACK=1,报文段序号:seq=U+1,确认号字段:ack=w+1,可携带数据 | 客户端进入时间等待状态(TIME-WAIT)服务器进入关闭状态(CLOSED),此时TCP连接还未释放,需要经过等待时间计时器设置的时间2MSL后,客户端才进入关闭连接的状态(CLOSED),即服务器进入关闭状态比客户端早些 |
为什么TCP释放连接需要4次挥手?
为了保证双方都能通知到对方,需要释放断开连接。
一个用户在输入URL地址后页面显示结果中间经历了哪些过程?
通过DNS找到对应的IP
1.找浏览器缓存,浏览器会保存一段时间你之前访问过的一些网址的DNS信息。
2.通过DNS找到域名对应的IP地址,首先会查找本地的hosts文件
3.若本地Hosts文件不存在该域名,会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS信息。
4.通过DNS找到域名对应的IP,你的ISP的DNS服务器会将请求发向根域名服务器进行搜通过DNS查找域名对应的IP地址
通过IP向对应的web服务器发送请求
浏览器终于得到IP地址后,接着给这个IP的服务器发送一个http请求,方式为get