面试笔试:计算机网络

明天开始复习计网,三天复习完常见概念吧,主要是看着网上的博客复习,不会的就翻书
加油!

1: osi中七层的作用

1: osi中七层的作用
**1) 物理层:**激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。
也就是说提供一个可靠的传输数据的物理媒体,中继器是一种放大和调整信号的机器,是对物理网络的延长
集线器则是可以看作多端口中继器,每个端口是一个中继器
2) 数据链路层: 数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

有关数据链路层的重要知识点:

1> 数据链路层为网络层提供可靠的数据传输;

2> 基本数据单位为帧;

3> 主要的协议:以太网协议;

4> 两个重要设备名称:网桥和交换机。
也就是说数据链路层主要是为了提供同一网络内或者是同一区间,同一类型内的寻址,将网络层中ip数据报封装成帧,还要处理传输差错,流量控制,数据的检错等功能,主要的协议时以太网协议,用mac地址寻址,网桥为第二层交换机,主要的作用是根据数据帧的内容转发给相邻网络;
3) 网络层:
网络层的目的是实现两个主机系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、 保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。

网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:

1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

2> 基本数据单位为IP数据报;

3> 包含的主要协议:

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议(Address Resolution Protocol,地址解析协议)可看成是跨网络层和链路层的协议;

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。

4> 重要的设备:路由器。
   网络层主要是确定不同网络间的路径选择,其中包括寻址和路由选择,连接的建立和保持,释放等等;
   最重要的协议时ip协议,时无连接数据报传输,数据报路由选择,和差错控制
   路由器时第三层交换机,是一种连接在网络层面上的两个网络,进行分组转发,根据ip地址转发。
   其他主要时ARP协议,RARP协议,ICMP协议。。。
  
  4) 传输层:
     第一个端到端,传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。作用:为应用进程之间提供端到端的逻辑通信。
  网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
  有关传输层的重点:
  1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
  2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);
  3> 重要设备:网关。
  
  网络层中完成了主机到主机之间的通信,但是并没有完成进程之间的通信,传输层主要就是解决这个问题的,利用端口提供可靠的或不可靠的端到端的通信,还要处理,差错控制,流量控制等问题
  数据单元为段或报文,主要协议为tcp udp
网关的概念比较大,可以是网间连接器(可以放在很多地方),也可以是一个协议转换器,转换器是指一种负责将从传输层到应用层的数据进行转换和转发,转换是指,翻译不同的不能直接通信的两种协议,实现两者的通信,例如,手机邮件和互联网邮件的转换服务
5) 会话层:
  会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
6) 表示层:
对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
7)应用层:
是最靠近用户的OSI层,为用户的应用程序提供网络服务的接口。将用户的操作通过应用程序转换成为服务,并匹配一个相应的服务协议发送给传输层。
注:我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议。

会话层、表示层和应用层重点:

1> 数据传输基本单位为报文;

2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
应用层主要是将各种应用程序通过选择应用层协议的方式进行特定通信处理

2:应用层与运输层的关系

https://blog.csdn.net/jnlovewwt1983/article/details/7920553
大概就是运输层+端口号就可以确定一种应用层协议吧

3:IP地址
ipv4中即使用网络号+主机号表示ip地址
广播地址:
主机号全为1及为广播地址,广播一般分为本地广播和直接广播,本地广播是指本网络内的广播,路由器会屏蔽,直接广播是指别的网络上的主机向广播地址传送数据包,目的网络的都会收到
组播地址:
就是D类地址
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;

B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;

C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。

D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);

E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。

注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。

ip地址:255.255.255.255
一个广播地址,一般在DHCP协议中使用,在域内广播
0.0.0.0:
常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想 要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。

回环地址:
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。

私有地址:
是允许重复的地址,和NAT一起搭配使用,在本网络中才有意义
 私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。

A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255

B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255

C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255

子网掩码:
 什么是子网掩码?
子网掩码是划分子网的方法,将一类地址中的主机号位加入网络号中实现子网的方式
  子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

**

划分子网的时候记得减去两个保留地址和网关地址

**

ARP/RARP协议

ARP协议:
工作流程:
1:会在自己的ARP缓冲区建立一个ARP缓冲表,以记录mac和ip地址的对应关系
2:当源主机需要发送数据时,检查目的ip的mac地址是否在缓冲区中,有的话直接发送
没有的话广播发送ARP包,包中包括源地址ip,mac,目的ip
3:本网段的所有主机检查是否为自己的ip,不是丢弃,时的话,更新自己ARP缓冲区,发送应答
附带自己的mac
4:原主机受到ARP,更新ARP缓冲区,没有收到则查询失败

RARP:
 (1)给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;

(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;

(3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  (4)如果不存在,RARP服务器对此不做任何的响应;
  (5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

TCP与UDP的区别:

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:

TCP面向连接,UDP面向非连接即发送数据前不需要建立链接
TCP提供可靠的服务(数据传输),UDP无法保证
TCP面向字节流,UDP面向报文
TCP数据传输慢,UDP数据传输快
TCP提供一种面向连接的、可靠的字节流服务
在一个TCP连接中,仅有两方进行彼此通信,因此广播和多播不能用于TCP
TCP使用校验和,确认和重传机制来保证可靠传输
TCP使用累积确认
TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

TCP和UDP都是运输层的协议,TCP是一种面向连接的提供可靠运输的协议,UDP则是一种面向无连接的把细节控制交给应用的协议
主要区别:
1 TCP面向连接,UDP面向无连接,就是发送数据前不需要建立连接
2 TCP提供可靠的服务,而UDP无法保证
3 TCP面向字节流,UDP面向报文
4 TCP数据传输慢,UDP数据传输快
5 TCp使用校检和,确认和重传机制来保证可靠运输
6 TCP使用延迟应答,也叫累积确认的方式
7 TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

TCP和UDP的应用场景:

TCP主要用于对传输质量有要求的应用,比如http,https,ftp等传输文件的时候,
SMTP,pop等传输邮件的时候
在日常生活中,常见使用TCP协议的应用如:浏览器,用的HTTP;FlashFXP,用的FTP;Outlook,用的POP、SMTP;Putty,用的Telnet、SSH;QQ文件传输
UDP至于用于对速度有要求的,比如QQ电话阿,视频电话啊

TCP对应的协议和UDP对应的协议

TCP:

FTP:定义了文件传输协议,使用21端口。
Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
HTTP:是从Web服务器传输超文本到本地浏览器的传送协议,端口默认80。

UDP:

DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
TFTP(Trival File TransferProtocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

为什么 TCP 叫数据流模式? UDP 叫数据报模式?

所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的,比如你通过 TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。
原因:这是因为TCP是面向连接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。
所谓的“数据报模式”,是指UDP发送端调用了几次 write,接收端必须用相同次数的 read 读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。
原因:这是因为UDP是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。 这时候,如果一次能读取超过一个报文的数据, 则会乱套。

所谓流模式是指,发送端发送了几次数据和接受端接收几次数据时没有联系的,,比如你通过 TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。抽象的可以认为接收端可以合并受到的数据

原因:因为TCP时面向连接的,可以认为数据全是有序到达的,所以接受端是可以任意接收的次数

所谓的“数据报模式”,是指发送端发送了几次数据,接收端就要接受几次

原因:UDP是面向无连接的,接收端收到的是是无顺序的,自然就不可以合并了

重传机制

两种重从传机制:
超时重传:就是过了某个设定的时间值,发送端还没有收到该有的ACK包,就会重传,直到收到ACK包或者达到一定重发次数为止
快速重传是为了不等待那个时间,以免减小网络吞吐量,而设计的,就是当接收端没有收到应有的序列号时,就会连发三个应有序列号的ACK包,发送端收到后,重传

TCP协议如何来保证传输的可靠性

https://blog.csdn.net/liuchenxia8/article/details/80428157
1 校检和机制
2 序列号和确认号(确认机制)
TCP将数据的每个字节编号,这就是序列号
确认号就是,TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
有了这两个不但可以保证数据的有序性,还可以拒绝接受重复数据
3 重传机制
上面已经讲过了,不再重复
4 连接管理
三次握手,四次挥手,可靠的连接建立时可靠运输的前提
5 流量控制 拥塞控制 滑动窗口
这三个可以放在一起讲:为了避免发送方每发送一个就要等待ACK包才能发送下一个,引入了滑动窗口机制,发送端每次可以发送窗口大小的数据,不必等到ACK才能发送下一个,等接收端收到了连续的数据时,发送ACK包,此时发送端向前滑动窗口。TCP中利用滑动窗口进行流量控制,是指:接收端在ACK中填写自己窗口值通过告诉发送端我还可以接收的值,发送端根据这个来调整自己窗口大小,当接收端通知自己的缓冲区满了的时候,发送端不再发送数据,等待一个超时重传的时间会发送探测包,接收端再发送自己的可接受的大小. 拥塞控制:是指在刚开始进行传输的时候,我们不清楚网络的通信情况,不能发送太多数据,这个时候我们利用拥塞窗口的概念,一开始设为1,没收到一个ACK,大小就加一,为了值的大小不能一直增长,我们设置了一个阙值,一开始为最大值,发生网络拥堵时,降为一半,窗口值为1
下面是图片:
在这里插入图片描述

TCP中的流量控制和拥塞控制

上面写了
贴个博客吧https://www.cnblogs.com/woaiyy/p/3554182.html

TCP的三次握手和四次挥手

三次握手:

1 接收端进程建立TCP传输控制模块TCB,时刻准备接受客户端的请求,进入listen状态
2 发出端同样建立TCB,然后随机一个序列号seq = x,发出连接请求,然后将SYN位置为1,ACK = 0
客户端进程进入了SYN-SENT状态(同步已发送状态);不允许携带数据,消耗一个序列号
3 服务器端收到请求,如果同意连接,发出确认报文,ACK = 1,SYN = 1,ack = x+1,seq = y
不携带数据,消耗一个序列号 进入SYN-RCVD(同步收到状态)
4TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号
5 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
如下图:
在这里插入图片描述

为什么是三次而不是两次呢:

主要是为了,已经失效了的请求报文又传到服务器端,
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

四次挥手:

1 客户端进程发出连接释放报文,并且停止发送数据。并且置FIN = 1,进入FIN-WAIT-1状态(终止等待1),seq = u
TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2 服务器端收到请求,发出确认报文ACK = 1,seq = z, ack = u+1,进入CLOSE - WAIT状态,(关闭等待状态) TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,客户端没有数据要发送了,但是服务端还可以向客户端发送数据,这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3 客户端收到确认报文,这时进入FIN-WAIT -2状态(终止等待2), 等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4 服务器端将自己最后的报文发送完毕,发送连接释放报文,FIN = 1,ack = u+1 seq = u 进入LAST-ACK(最后确认状态) 等待客户端的确认
5 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6 服务器端收到ACK报文后,立即进入CLOSED状态,撤销TCB,关闭连接,关闭时间比客户端早一点

在这里插入图片描述

三次握手和四次挥手的缺陷:

https://blog.csdn.net/hacker00011000/article/details/52319111

为什么客户端最后还要等待2MSL

1 可靠的实现连接终止
当最后一个ACK报文发出的时候,这个报文也有可能丢失,或者延迟到达,如果服务器端收不到,就会再次发送FIN报文,这就是为什么要等待2MSL了,一个是ACK发送的时间,还有一个就是重发FIN的时间
2 确保老的重复的报文段在网络中过期失效,这样建立新的连接时将不再接受它们
TCP协议采用的是出错重传,也就是会生成重复的报文,并且根据路由器的选择,这些重复的报文可能在连接终止后才到达,如果客户端/服务器端收到这个老的报文会把它误认为一个同一连接的新的报文,然后对这个报文进行处理,这样就会出现错误。从状态转换图我们可以看到从TIME_WAIT到连接终止,中间有2MSL,这个时间足以让老的重复的报文段过期失效。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

因为在握手的过程中,服务器端收到连接建立请求后,服务器端并没有要处理的其他事情,可以把ACK和SYN放在同一个报文里

在挥手过程中当服务器端收到liFIN之后,只是代表发送端没有数据要发送了,并不是代表服务器端没有事干了
所以先发送ACK,待处理完后发送FIN

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP中设置了一个计时保活器,每收到一次客户端的报文,就会重置,一般为2小时,如果超过这个时间
还没有收到报文,则会iui发送探测报文,一连10次都没回应的话,关闭连接

TCP粘包问题

1 什么是粘包现象
  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
 (1)发送方原因

我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一起发送。

所以,正是Nagle算法造成了发送方有可能造成粘包现象。

(2)接收方原因

TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一 来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。

3 什么时候需要处理粘包现象
  (1)如果发送方发送的多个分组本来就是同一个数据的不同部分,比如一个很大的文件被分成多个分组发送,这时,当然不需要处理粘包的现象;

(2)但如果多个分组本毫不相干,甚至是并列的关系,我们就一定要处理粘包问题了。
如何处理粘包现象
  (1)发送方

对于发送方造成的粘包现象,我们可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。

(2)接收方

遗憾的是TCP并没有处理接收方粘包现象的机制,我们只能在应用层进行处理。

(3)应用层处理

应用层的处理简单易行!并且不仅可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。

解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?

两种途径:

1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;

2)发送长度:发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时可以根据长度来判断每条数据的开始和结束。
https://www.cnblogs.com/qiaoconglovelife/p/5733247.html
https://www.cnblogs.com/QG-whz/p/5537447.html

请简单说一下你了解的端口及对应的服务

在这里插入图片描述

21 FTP 22 SSH 23 TELNET 25 SMTP 53 DNS HTTP 80 POP3 110 MYSQL 3306

端口

注意区别硬件端口。

软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
端口号只具有本地意义,它只为标志计算机应用层中的各个进程在和运输层交互时的层间接口,在互联网不同计算机中,相同的端口号是没有关联的。
两个计算机的进程相互通信,不仅需要知道对方的IP地址(为了找到对方计算机),还要知道对方的端口号(为了找到对方计算机中的应用进程)
两大类:1.服务器端使用的端口号(常用熟知)2.客户端使用的端口号(短暂)。

UDP如何实现可靠性传输

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

实现确认机制、重传机制、窗口确认机制。

如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:

发送:包的分片、包确认、包的重发

接收:包的调序、包的序号确认

注:
1)给数据包编号,按照包的顺序接收并存储;
2)接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据以后再继续发送下一个包,如果接收端收到的数据包的编号不是期望的编号,则要求发送端重新发送。

交换机、路由器的概念,并知道各自的用途

路由器(Router)是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如IP协议。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

DNS的工作原理:

https://blog.csdn.net/root_robot/article/details/53872812

客户机发出的信息有三条:1 完整的域名 2 指定的查询类型 3 DNS域名的指定类别
注意DNS的迭代查询和递归查询: 简单来说就是递归查询是把任务交给了本地DNS, 迭代是自己完成任务

递归查询
在这里插入图片描述
迭代查询:
在这里插入图片描述

路由选择协议

路由选择协议就是确定数据报在源地址和目的地址之间选择的路径
路由选择协议分为:静态的和动态的,internet采用的是动态的,将互联网划分为很多个AS
AS最主要的特征是:一个AS对其他AS表现出来是单一的和一致的路由选择策略

从而会衍生出两种协议
内部网关协议(IGP):即在一个AS内部使用的路由选择协议,而这与互联网中其他AS选用什么路由协议无关。比如:RIP OSPF

外部网关协议(EGP):若源主机和目的主机不再同一个AS中,就需要使用一种协议将路由选择信息传递到另一个AS中,这就是EGP。比如:BGP。

TCP/IP通信过程(以发送电子邮件为例)

https://www.cnblogs.com/inception6-lxc/p/9383607.html

没啥好说的

HTTP协议(超文本传输协议):

HTTP协议是工作在应用层上的协议,由请求和响应构成,是标准的客户端服务端模型

HTTP是基于TCP协议传输的,默认端口号是80

工作流程:
1 客户端连接到web服务器
一个http客户端与服务器端的端口(80)建立一个TCP套接字连接
2 发送HTTP请求
客户端发送http请求,一个请求报文由四个部分组成:请求行,请求头部,空行,请求数据
3 服务器端收到请求并回复报文
web服务器解析请求,定位请求资源,复制到恢复报文中,发送给客户端。请求报文由4部分组成:
状态行,响应头部,空行,恢复数据
4 释放连接
如果connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭(http1.0)
如果是keep-alive的,该连接会保持一段时间,该时间内还可以继续接受请求(http1.1)
5 客户端解析回复报文
客户端先解析状态行,如果时表示成功的代码,然后解析每一个响应头,响应头告诉一下为若干字节的
html文档和文档字符集,然后读取html内容,格式化后在浏览器窗口显示

http消息结构:
如图:请求行,请求头部,空行,数据部分(也可以说是三部分)

在这里插入图片描述

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

http常见状态码有哪些

2开头的
常见的200

3开头的
3开头状态码
3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。

304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

4开头的:请求错误

400 请求错误,服务器不理解请求的语法
403 禁止,拒绝执行要求
404 页面没找到
5开头:服务器出现错误

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

重点:200,304,403,404,500

HTTP与HTTPS区别

https://www.cnblogs.com/wqhwe/p/5407468.html
应该了解即可

HTTP1.0和HTTP1.1的区别

https://www.cnblogs.com/gofighting/p/5421890.html

HTTP长连接与短链接

这也是1.0和1.1的主要区别了吧,1.0中默认使用短连接,即每进行一次HTTP操作,就建立一次连接,任务结束就中断连接

长连接在一定时间内不会关闭连接
加一个请求头
connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

在浏览器中输入www.baidu.com后执行的全部过程

差不多就是这些了 剩下的还有一些就等我学完unix网络编程吧QAQ

我觉得ip层的东西也要去看一看QAQ(好多啊,今天还要看操作系统)

ICMP协议:

icmp协议时工作在网络层的一种用于控制和传送错误信息的一种协议,能够收集网络信息和诊断排错等

主要有这几种类型的消息:
目标不可达消息(类型3):
路由器无法将数据包给目的地址时就会法一个目标不可达,(错误代码为1) 发送端主机根据这个包解析原因
重定向消息(类型5)
当选择的路由器不是最优解时,路由器除了转发数据包之外,还会向发送端主机发送重定向,告诉更好的选择,主机将这个选择追加到自己的路由选择中
超时消息(类型11)(利用次消息的命令,traceroute)
IP包中有个TTL字段,每经过一次路由器就减少1,为0时则丢弃ip包,并返回超时消息
回送消息(类型0,8)PING命令
判断数据包是否成功到达了对端的一种消息
发送端发送回送请求,接收端发送回送应答

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python后端开发面试笔试主要涉及并发编程、网络协议、以及编程知识。在并发编程方面,需要了解并发编程的目的是为了提高程序的运行速度,同时需要了解Python对并发编程的支持情况。在网络协议方面,需要了解整个请求-响应的过程,包括域名解析、建立连接、HTTP请求和响应等步骤。此外,还需要了解TCP和UDP在网络协议中的位置以及区别。在编程知识方面,需要了解量化交易策略的原理与代码实现,并具备金融、数学和计算机编程的基础知识,以达到量化交易开发工程师的水平。综上所述,在Python后端开发面试笔试中,需要熟悉并发编程、网络协议和量化交易策略的相关知识。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python后端开发面试题汇总](https://blog.csdn.net/z94264326/article/details/124781014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python量化交易策划开发领域-视频教程网盘链接提取码下载 .txt](https://download.csdn.net/download/m0_66047725/88222682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值