目录
五层协议的体系结构
- Q:五层协议的体系结构分别是什么?每一层都有哪些协议?
MAC地址&IP地址
MAC地址
IP地址
- Q:为何有MAC地址还要IP地址?
- Q:既然 IP 地址不能去掉,那么能不能去掉 MAC 地址呢?
TCP&UDP
TCP
- Q:建立&断开TCP连接?(三次握手&四次挥手)
- Q:TCP 为什么是三次握手,而不是两次或四次?
- Q:TCP 为什么是四次挥手?
- Q:为什么第四次挥手后,客户端要等待TIME-WAIT时间2MSL,而不是直接进入CLOSED状态?
- Q:TCP如何保证可靠传输?
UDP
TCP&UDP的对比与应用
- Q:TCP和UDP的区别?
- Q:播放视频使用TCP还是UDP?
HTTP(S)
版本
长连接&短连接
- Q:响应状态码有哪些?
- Q:http请求有哪些?
- Q:get和post的区别?
- Q:http和https的区别?
- Q:http和tcp的区别?
- Q:http和Socket的区别?
- Q:在地址栏输入URL进行访问,会发生什么?
五层协议的体系结构
Q:五层协议的体系结构分别是什么?每一层都有哪些协议?
第一层:物理层(physical layer)
- 中继器、集线器等,以二进制数据形式在物理媒体上传输数据。
- 任务:透明地传送比特流。
第二层:数据链路层(data link layer)
- 以太网交换机、网卡等,接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。
- 协议:逻辑链路控制LLC、媒体接入控制MAC。
第三层:网络层(network layer)
- 负责为分组交换网上的不同主机提供通信服务。
- 协议:IP协议、地址解析协议ARP、逆地址解析协议RARP、因特网控制报文协议ICMP。
第四层:运输层(transport layer)
- 负责向两个主机中进程之间的通信提供服务。
- 协议:传输控制协议TCP、用户数据包协议UDP.。
第五层:应用层(application layer)
- 体系结构中的最高,直接为用户的应用进程提供网络通信服务。
- 协议:文件传输协议FTP、远程登录协议TELNET、超文本传输协议HTTP、域名系统DNS、简单邮件协议SMTP、简单网络管理协议SNMP。
- 数据在各层之间的传递过程
MAC地址&IP地址
MAC地址
MAC地址(Media Access Control Address)是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。
唯一性:每台设备具有唯一的MAC地址。MAC地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,都有相同的MAC地址,它由厂商写在网卡的BIOS里。
- 拓展内容:怎样确保MAC地址唯一
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:08:00:20:0A:8C:6D。其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(Istitute of Electrical and Electronics Engineers,电气与电子工程师协会)分配,而后6位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的MAC地址。
IP地址
IP地址(Internet Protocol Address)即网际协议地址,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址表示方式
- IP地址由32位二进制位表示,提供2^32 ≈ 42亿个地址。
- 点分十进制表示:32位分成了4个8位组,相邻8位组之间用'.'分割,每个8位组转换成十进制数,从0到255。
一些特殊的IP地址
- 0.0.0.0:保留的IP地址,表示这个主机,这个网络,Cisco路由器指定的默认路由。
- 255.255.255.255:泛洪广播地址,指代互联网上所有的主机。
- 127.x.x.x:环回地址,特殊地址,用于回路测试。
- 127.0.0.1:表示localhost,本机IP地址。
- 169.254.x.x:如果你的主机使用了DHCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。
- 10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x:私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。
Q:为何有MAC地址还要IP地址?
IP地址根据网络的拓朴结构分配,保证路由选择方案建立在网络所处的拓扑位置基础而不是设备制造商的基础上。
使用IP地址更方便数据传输。数据包在这些节点之间的移动都是由ARP协议负责将IP地址映射到MAC地址上来完成的。原因
如果只用 MAC 地址,我们会发现路由器需要记住每个 MAC 地址所在的子网是哪一个(不然每一次收到数据包的时候路由器都要重新满世界地去找这个 MAC 地址的位置)。而世界上有2^48个 MAC 地址,这就意味着即使我们给每个 MAC 地址只留 1 字节的储存空间,每个路由器也需要 256 TB 的内存。这显然是不可能实现的。
这就是我们需要 IP 地址的原因了。和 MAC 不同的是,IP 地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的 IP 地址前缀都是一样的。这个前缀就像邮政编码一样。这样,路由器过 IP 地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。
Q:既然 IP 地址不能去掉,那么能不能去掉 MAC 地址呢?
- 不能。因为 IP 地址是要设备上线以后,才能根据他进入了哪个子网来分配的,不能。因为 IP 地址是要设备上线以后,才能根据他进入了哪个子网来分配的。
TCP&UDP
TCP
传输控制协议TCP(Transmission Control Protocol):面向连接的,数据传输的单位是报文段,能够提供可靠的交付。
Q:建立&断开TCP连接?(三次握手&四次挥手)
- 建立TCP连接:TCP的三次握手
TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。
第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
- 断开TCP连接:TCP的四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
第一次挥手:客户端在数据发送完毕后,发送一个结束数据段FIN,用来关闭客户到服务器的数据传送。
第二次挥手:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
CLOSE-WAIT时间:服务器考虑是否还有数据需要发送给客户端,继续发送完毕后进入第三次挥手。
第三次挥手:服务器关闭客户端的连接,发送一个FIN给客户端。
第四次挥手:客户端发回ACK报文确认,将确认序号设置为收到序号加1。
Q:TCP 为什么是三次握手,而不是两次或四次?
来自知乎的回答:https://www.zhihu.com/question/24853633
三次握手:“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”两次握手:“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“草,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”四次握手:“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟傻逼说话”
Q:TCP 为什么是四次挥手?
由于TCP连接是全双工的,因此每个方向都必须单独关闭,一共需要四个阶段:服务器读通道关闭->客户机写通道关闭->客户机读通道关闭->服务器写通道关闭。
例如客户端A与服务器B需要断开TCP连接
A:“喂,我不说了 (FIN)。”
A->FIN_WAIT1
B:“我知道了(ACK)。等下,上一句还没说完。Balabala…..(传输数据)”
B->CLOSE_WAIT | A->FIN_WAIT2
B:“好了,说完了,我也不说了(FIN)。”
B->LAST_ACK
A:“我知道了(ACK)。”
A->TIME_WAIT | B->CLOSED
A等待2MSL,保证B收到了消息,否则重说一次“我知道了”,A->CLOSED
Q:为什么第四次挥手后,客户端要等待TIME-WAIT时间2MSL(Maximum Segment Lifetime 最长报文寿命),而不是直接进入CLOSED状态?
等待2倍最长报文寿命,能够保证对方收到ACK后可靠关闭连接,保证本次连接的所有数据都从网络中消失。
保证TCP协议的全双工连接能够可靠关闭
- 如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因导致Server没有收到Client最后回复的ACK,那么Server就会在超时之后继续发送FIN,而此时Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。
保证本次连接的重复数据段从网络中消失
- 如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。加入出现这样的特殊情况:新连接和已经关闭的老连接端口号是一样的,前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。
Q:TCP如何保证可靠传输?
- 校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到端的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
- 确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
- 序列号:TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 连接管理:三次握手&四次挥手。
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
- 拥塞控制:对网络中的路由和链路传输进行速度限制,避免网络过载;包含四个过程:慢启动、拥塞避免、快重传和快恢复。
UDP
用户数据报协议UDP(User Datagram Protocol):无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付”。
- 特点:UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
TCP&UDP的对比与应用
Q:TCP和UDP的区别?
TCP传输控制协议 UDP用户数据报协议 面向连接 无连接 使用全双工的可靠信道 使用不可靠信道 提供可靠的服务,即无差错、不丢失、不重复,保证顺序 尽最大努力交付,即不保证可靠交付,可能丢包,不保证顺序 拥塞控制、流量控制、超时重发、丢弃重复数据等等可靠性检测手段 无拥塞控制等 流模式,面向字节流 数据报模式,面向报文 每条TCP连接只能是点到点的 支持一对一、一对多、多对一和多对多的交互通信 用于传输可靠性要求高的数据 用于传输可靠性要求不高的数据 对系统资源的要求较多 对系统资源的要求较少 速度慢 速度快
Q:播放视频使用TCP还是UDP?
播放视频使用UDP。UDP适用于对网络通讯质量要求不高、要求网络通讯速度能尽量快的实时性应用;且视频区分关键帧和普通帧,如果UDP只是丢普通帧损失并不大,取而代之的是高速率和实时性,降低资源要求。
- 拓展内容:两者的应用场景?
TCP:通信数据完整性 > 通信实时性,如:文件传输、重要状态的更新等。
UDP:通信实时性 > 通信数据完整性,如:视频传输、实时通信、游戏等。
HTTP(S)
版本
- HTTP/0.9:只接受GET一种请求方法,没有在通信中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
- HTTP/1.0:第一个在通信中指定的版本号,至今被广泛采用,特别是在代理服务器中。
- HTTP/1.1:当前版本,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
- HTTP/2:采用了新的方法来编码、传输客户端——服务器间的数据。使用多路复用技术(Multiplexing),多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
长连接&短连接
HTTP 长连接和短连接
- 在HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
- 从 HTTP/1.1起,默认使用长连接,用以保持连接特性。
Q:响应状态码有哪些?
HTTP状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码,其中第一位数字表示响应的类型,常用的状态码有五大类:
- 1xx:消息。服务器已接受请求,需要继续处理。
- 2xx:成功。服务器已成功接收到请求并进行处理。
- 200 OK:请求成功(其后是对GET和POST请求的应答文档)
- 201 Created:请求被创建完成,同时新的资源被创建。
- 202 Accepted:服务器已接受请求,但尚未处理。
- 3xx:重定向。需要客户端采取进一步的操作才能完成请求。
- 4xx:请求错误。客户端请求错误,妨碍了服务器的处理。
- 400 Bad Request:服务器未能理解请求。(语义有误、请求参数有误)
- 401 Unauthorized:当前请求需要用户验证。请求需包含一个恰当的 Authorization 头信息。
- 402 Payment Required:此代码尚无法使用。
- 403 Forbidden:对被请求页面的访问被禁止。
- 404 Not Found:服务器无法找到被请求的页面。
- 5xx:服务器错误。服务器在处理请求的过程中有错误或者异常状态发生。
- 500 Internal Server Error:请求未完成。服务器遇到不可预知的情况。
- 501 Not Implemented:服务器不支持所请求的功能。
- 502 Bad Gateway:服务器从上游服务器收到一个无效的响应。
- 503 Service Unavailable:临时的服务器维护或者过载,服务器当前无法处理请求。
- 504 Gateway Timeout:网关或者代理工作的服务器尝试执行请求超时。
Q:http请求有哪些?
- GET:请求指定的页面信息,并返回实体主体。
- HEAD:只请求页面的首部。
- POST:请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE:请求服务器删除指定的页面。
- OPTIONS:允许客户端查看服务器的性能。
- TRACE:请求服务器在响应中的实体主体部分返回所得到的内容。
- PATCH:实体中包含一个表,表中说明与该URI所表示的原内容的区别。
- MOVE:请求服务器将指定的页面移至另一个网络地址。
- COPY:请求服务器将指定的页面拷贝至另一个网络地址。
- LINK:请求服务器建立链接关系。
- UNLINK:断开链接关系。
- WRAPPED:允许客户端发送经过封装的请求。
Q:get和post的区别?
GET:
- 当客户端要从服务器中读取某个资源时使用GET;
- 一般用于获取/查询资源信息;
- GET参数通过url传递,以?分割url和传输数据,参数之间以&相连;
- 传递的参数是有长度限制(因为浏览器对url有长度限制),不能用来传递敏感信息;
- 只要在地址栏中输入一个网址回车访问,那么就是GET。
POST:
- 当客户端给服务器提供信息较多时可以使用POST;
- POST会附带用户数据,一般用于更新资源信息;
- POST将请求参数封装在HTTP 请求报文体中,url看不到;
- 可以传输大量数据,传参方式比GET更安全。
Q:http和https的区别?
https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;https协议是由SSL+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
Q:http和tcp的区别?
- tcp是传输层协议,定义数据传输和连接方式的规范。
- Q:http是建立在tcp协议之上的一种应用,是应用层协议,定义的是传输数据的内容的规范。
Q:http和Socket的区别?
- http是应用层协议,基于TCP协议,是短连接;使用“请求—响应”方式建立连接;不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。
- Socket是对TCP/IP协议的封装,是接口而不是协议;Socket是长连接,通常情况下Socket连接就是 TCP 连接;Socket连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。
Q:在地址栏输入URL进行访问,会发生什么?
- 浏览器向DNS服务器请求解析URL中的域名所对应的IP地址;
- 解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;
- 浏览器向服务器发送读取文件的HTTP请求(该请求报文作为TCP三次握手的第三个报文的数据发送给服务器);
- 服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器;
- 释放TCP连接,若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
- 浏览器解析接收到的html文本并显示。
(后续补充中...)
希望这篇文章对你有帮助~