网络协议相关面试问题-TCP与IP网络模型
互联网应用的实现主要是通过分层来实现的,每一层有自己相应的功能,上层依赖于下层,具体层次如下图:
下面具体一层层来了解:
物理层 / 实体层:
也就是将电脑通过物理的手段连接起来,其实也就是01电子信号的传输,这层有个了解既可,对于应用开发来说根据接触不到这么底层。
链接层:
- 链接层的协议
它位于物理层上方,而物理层只是一个01的电子信号,木有对信息号进分组,以太网协议规定了电信号的分组方式。下面则是以太网规定的数据包:
其中Head里面包含了发送者或接收者的地址,还有数据类型等,而Data则是数据包中的具体内容。
- mac地址
它长这样:
以太网规定每一个连接入网的所有设备都必须有一个网卡的接口,数据包必须是从一个网卡传递到另一个网卡上,而网卡的地址就是MAC地址。
- 广播
就算知道了网卡信息,如何发送给指定的计算机呢,看下图:
1号计算机想要给2号计算机发送消息,其3、4、5号计算机也会收到此消息,只是说该消息头部带有要接收的mac地址,如果跟本机匹配上那就处理该消息,否则就丢弃,这就是所谓的广播。
网络层:
在上一层链接层以太网可以从一个MAC地址通过广播的形式发送到另一个MAC地址,这从技术上是可以实现的,但是效率太低了, 另外广播的方式只能在同一个子网络上进行传递,如果是不同的子网络则广播就无法传递了,而互联网是由无数个子网络组成,所以要想从上海主机找到美国主机那用广播就没法实现了,所以网络层就诞生了。
- 作用:
背景:以太网采用广播方式发送数据包。
TODO:能够区分哪些MAC地址属于同一个子网络。
作用:使得我们能够区分不同的计算机是否属于同一个子网络
网络层出现之后每台主机就有了一个IP地址和一个MAC地址了,MAC地址是绑定在网卡上的,而IP地址是网络管理员分配的,是动态变化的,而IP地址是可以帮我们确定子网络,而MAC地址功能则不一样,它是将数据包送到该子网络的目标网卡,所以从逻辑上需要清楚一点:先处理网络IP地址再处理MAC地址。 - ip协议:
规定网络地址的协议。 - ip数据包:
根据IP协议发送的数据,而它的格式如下:
其中Head主要是存放一些数据的长度,IP地址等,而Data则是存放数据的具体内容,这是将IP数据包放在以太网数据包里的格式。
- arp协议:
背景:由于IP数据包是放在以太网数据包里发送的,所以说必须同时知道两个地址:一个是对方的MAC地址,另一个是对方的IP地址,通常情况下对方的IP地址是已知的,但是不知道对方的MAC地址,因为IP地址可以通过路由找到,而MAC地址是独一无二的,所以需要一个机制,能够从IP地址得到MAC地址。
核心原理:ARP协议也是发送一个数据包,它所在子网络的每一个主机都会收到这个数据包,然后从该数据包中提取出IP地址,再跟自身的IP地址进行比较,如果相同则做出回复并向对方报出自己的MAC地址,否则就会丢弃。这样有了ARP协议之后,我们就能够在同一个子网络内的主机MAC地址把它发送数据包到任意一个主机之上,跟链接层的广播异曲同工,只是广播对比的是MAC地址,而ARP协议对比的是IP地址。
传输层:
背景:根据前面的层目前已经有了IP地址和MAC地址了,就可以在互联网上的任意两台主机进行通讯了,那接下来问题来了:同一台主机许多程序都会用到网络,比如说:一边浏览网页,一边用qq跟朋友聊天,这时如果数据包从网络发来时怎么知道它是代表网页的内容,还是表示在线聊天的内容呢?所以此时还需要另外一个参数来表示数据包是供哪个应用程序使用的,这个参数就叫作端口号。
传输层的格式:
还是由Head+Data组成,而网络层是主机与主机的通讯,而到了传输层则是端口与端口之间的通讯了,其协议主要是有TCP和UDP。
应用层:
以上有了主机到主机之间的通讯和端口到端口之间的通讯之后,于是乎就可以实现应用程序之间的交流了。
应用层的作用,就是规定应用程序的数据格式。因为有各种各样的程序需要传递数据,比如说有EMAIL、www数据,此时就必须规定不同的协议不同的数据,这就是应用层所干的事,而结合物理层、网络层、传输层,格式就变成这样了:
以太网标头指的是MAC地址。
网络协议相关面试问题-TCP与IP网络模型的更多相关文章
- 网络协议相关面试问题-TLS与SSL握手
HTTPS是什么? HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL / TLS)上的常规HTTP协议.通过在TCP和HTTP之间加入TLS(Transport Layer Securi ...
- 网络协议相关面试问题-http协议相关面试问题
HTTP协议简介: 一些基本概念: 协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则. HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML ...
- 网络协议相关面试问题-DNS相关面试问题
对于网络上的大部通讯都是基于TCP/IP协议的, 其中最重要的是IP协议,它是基于IP地址的,而计算机通讯只能识别IP地址,如192.168.0.1,而不能识别像咱们在浏览器敲得见名之义的" ...
- 网络协议相关面试问题-https加密算法相关面试问题
密钥: 密钥是一种参数,它是在使用密码cipher算法过程中输入的参数,同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文.所以说算法既使公开了但是密钥参数不同其结果也是不同的,其中关于明文 ...
- PHP网络协议相关考点
HTTP状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. HTTP状态码主要有5种,代表5种不同类型的响应: 1xx:信息性状态码,代表接 ...
- 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- TCP/IP网络协议基础
实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...
- 对TCP/IP网络协议的深入浅出归纳
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
随机推荐
- python基础知识(继承)
继承的基本语法 class Class(继承那个基类如果有多个基类用逗号隔开,如果没有就继承object): """ 类的帮助信息""" ...
- php 解决跨域问题
header('Access-Control-Allow-Origin:*');header('Access-Control-Allow-Methods:POST,GET,OPTIONS');head ...
- Linux下使用 minicom 自动重复发送数据的实现
目录 在minicom中添加脚本路径 编写脚本 执行脚本 一个项目里要用的设备需要用串口来模拟传感器来测试,还是Linux下的. 串口助手cutecom很好用,但是不能定时发送数据. 所以用下面这个脚 ...
- [Agc036D]Do Not Duplicate_链表_贪心_数论
Do Not Duplicate 题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_b 题解: 首先最后肯定至多只有$n$个数. 我们想处理出来 ...
- IDEA里的git的使用
1.将代码交由git管理 VCS ——> Enable Version Control Integration... 选择要使用的版本控制系统,选择Git ——> OK 2.将代码 ...
- (5.14)mysql高可用系列——级联复制与多主一从
目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup ...
- commons-lang3依赖下的StringUtils类的isEmpty()方法和isBlank()方法
isEmpty()方法源码 isBlank()方法源码 测试 import org.apache.commons.lang3.StringUtils; public class main { publ ...
- BOF和EOF的详细解释 ADO的三个核心对象
使用ADO连接数据库进行查一个列表询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果.这个内存中的列表就是数据集.在你的程序里面rs就是标识的这个数据 ...
- 题解 P3627 【[APIO2009]抢掠计划】
咕了四个小时整整一晚上 P3627 [APIO2009] 抢掠计划(https://www.luogu.org/problemnew/show/P3627) 不难看出答案即为该有向图的最长链长度(允许 ...
- php exec执行不等待返回结果
windows中:pclose(popen("start php.exe test.php","r"));lnuix中: pclose(popen(" ...