网络知识总结

 


网络协议

协议分层

1. OSI七层模型

    OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

2. TCP/TP五层(或四层)协议

  • 物理层:负责光电信号的传输方式。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器工作在物理层。
  • 数据链路层:负责设备之间数据帧的传送和识别。例如网卡设备的驱动、帧同步(从网络上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机工作在数据链路层。
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器工作在传输层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 应用层:负责应用程序之间的沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。

图解

             

备注:(一般而言,除特殊情况)

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
  • 对于一台路由器,它实现了从网络层到物理层。
  • 对于一台交换机,它实现了从数据链路层到物理层。
  • 对于集线器,它只实现了物理层。

深入理解各层作用 

应用层

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

  • HTTP协议格式
  1. HTTP请求

  •  首行:[方法] + [url] + [版本]  
  •  Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分割;遇到空行表示Header部分结束
  •  Body:空行后面的内容都是Body. Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body 的长度。

2.    HTTP响应

  • 首行:[版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性,冒号分割的键值对;每组属性之间使用\n分割;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body 的长度;如果服务器返回一个Html页面,那么html页面内容就是在body中

参考:

https://www.cnblogs.com/jpfss/p/10984966.html  (HTTP方法、状态码、Header)

DNS协议(Domain Name System-域名解析协议)

域名:主域名是用来识别主机名称和主机所属的组织结构的一种分层结构的名称。

域名服务器:域名是分层结构,域名服务器也是对应的层级结构。

域名解析过程:

  • 输入域名后,先查找自己的主机对应的域名服务器。
  • 域名服务器先查找自己的数据库中的数据。如果没有,就向上级域名服务器进行查找,一次类推;
  • 最多回溯到根域名服务器,肯定能找到这个域名的IP地址。
  • 域名服务器自身也会进行一些缓存,把曾经访问过的域名和对应的IP地址缓存起来,可以加速查找过程。

传输层

端口号

端口号标识了一个主机上进行通信的不同的应用程序。在TCP/IP协议中,用"源IP","源端口号","目的IP","目的端口号","协议号"这样一个五元组来标识一个通信。

端口号分为划分: 

  • 0 - 1023: 知名端口号,HTTP, FTP, SSH等这些广为使用的应用层协议,他们的端口号都是固定的。
  • 1024 - 65535: 操作系统动态分配的端口号。客户端程序的端口号,就是由操作系统从这个范围分配的。

认识知名端口号:

  • ssh服务器,使用22端口。
  • ftp服务器,使用21端口。
  • telnet服务器,使用23端口。
  • http服务器,使用80端口。
  • https服务器,使用443

UDP协议

UDP协议端格式

基于UDP的应用层协议:

  • NFS:网络文件系统
  • TFTP: 简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名 解析协议

TCP协议

TCP协议段格式

1、16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。

2、16位目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

3、32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码  (Initial Sequence Number,ISN),而第一个数据字节是ISN+1。这个序列号(序列码)可用来补偿传输中的不一致。

4、32位确认序号:32位的序列号由接收端计算机使用,重组分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。

5、4位首部长度:4位包括TCP头大小,指示何处数据开始。

6、保留(6位):6位值域,这些位必须是0。为了将来定义新的用途而保留。

7、标志(6位):表示为:

  •    URG:紧急标志。紧急标志为"1"表明该位有效。

  •    ACK:确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号                         (w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。PSH:推标志。该标志置位时,接收端                  不将该数据进行队列处理,而是尽可能快地将数据转由应用处理。在处理Telnet或rlogin等交互模式的连接时,该标志总                是置位的。

  •    RST:复位标志。用于复位相应的TCP连接。

  •    SYN:同步标志。表明同步序列编号栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编                号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从                0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编               号栏包括了TCP分段中第一个字节的序列编号。

  •    FIN:结束标志。

8、16位窗口大小:用来表示想收到的每个TCP数据段的大小。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗         口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗        口大小最大为65535字节。

9、16位校验和:16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有         效性。检验和覆盖了整个的TCP报文段:这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证的。

       (检验范围包括首部和数据两部分。和UDP用户数据报一样,在计算校验和 时,要在TCP报文段加上12字节的伪首部。)

10、16位紧急指针:指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。         加快处理标示为紧急的数据段。

11、选项:长度不定,但长度必须为1个字节。如果没有选项就表示这个1字节的域等于0。

12、数据:该TCP协议包负载的数据。

 

连接管理机制

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。

TCP保证可靠性和提高性能机制:

可靠性:

  • 校验和
  • 序列号(按序到达)
  • 确认应答
  • 超时重传
  • 连接管理
  • 流量控制
  • 拥塞控制

提高性能:

  • 滑动窗口
  • 快速重传
  • 延迟应答
  • 捎带应答

其他

  • 定时器(超时重传定时器、保活定时器、TIME_WAIT定时器等)

1. TCP/IP为什么需要三次握手?

假设改为两次握手,client端发送的一个连接请求在服务器滞留了,这个连接请求是无效的,client已经是closed的状态了,而服务器认为client想要建立

一个新的连接,于是向client发送确认报文段,而client端是closed状态,无论收到什么报文都会丢弃。而如果是两次握手的话,此时就已经建立连接了。

服务器此时会一直等到client端发来数据,这样就浪费掉很多server端的资源。

2. TIMEWAIT状态也称为2MSL等待状态

 1)为实现TCP这种全双工(full-duplex)连接的可靠释放

这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。

2)为使旧的数据包在网络因过期而消失(否则服务器立即重启,可能会受到来自上一个进程的迟到的数据,但是这种数据很可能是错误的。)

每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。

3. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

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

详见:https://www.cnblogs.com/pengmn/p/10836784.html

网络层 (在复杂的网络环境中确定一个合适的路径)

IP协议

协议头格式

版本:占4位,说明IP协议的版本,IPv4的版本为0100 
首部长度:占4位,能够表示最大的值为15,每个值的单位为4字节,如果可变部分长度为0,IP首部最小为20字节。如果可变部分长度不为0,则IP首部长度最大为60字节 
服务类型:占8位,前三位表示数据包优先级,范围为0~7,路由器一般忽略优先级。紧接着四位为DTRC,D:表示低延迟,T:高吞吐量,R:高可靠性,C:最小代价。DTRC只能同时设置一个,仅仅只是建议,并不一定生效。最后一位为预留。一般情况下不使用服务类型。 
总长度:16位,指首部和数据之和的长度,单位为字节,因此数据包的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU。 
标识:占16位,每发送一个数据包,该项值加一。同一个数据包分片情况下各分片数据包的标识值和原来相同。 
标志:占3位,只有后两位有意义。DF:0表示分片,1不分。MF:0表示最后一个分片,1表示后面还有分片 
片偏移:占13位,表示分片后数据开头在未分片前数据中位置,以8个字节为偏移单位。 
关于分片时机说明一下:在以太网中mtu默认为1500字节(IP头部+数据),IP头部最小20字节,所以一个数据包的数据最大1480字节。假设某个数据长度为3512字节,通过分片得到数据长度为(假设为开启选项)1480,1480,552。那么这数据包的标识相同,标志DF,MF为:01,01,00。片偏移为:0/8=0,1480/8=185,2960/8=370 
生存时间:占8位,Linux下默认为64,window下默认为128,每经过一个路由设备减去1,减为0时丢弃该数据包。 主要用来防止出现路由循环。
协议:占8位,说明上层为何种协议,TCP为6。 
首部校验和:仅仅IP首部校验,此处保存该首部校验结果。 
源地址:发送该数据包的IP地址 
目的地址:目的主机的IP地址 
可选字段:由选项码,选项长度,选项数据组成。正常情况下很少使用选项,选项字段以32位单位,若不足以0进行填充。保证IP首部长度为32bit倍数。

路由

在负责的网络结构中,找出一条通往终点的路线。

IP数据包的传输过程也和问路一样:

  • 当IP数据包,到达路由器时,路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器
  • 一次反复,一直到达目标IP地址。

数据链路层(用于两个设备(同一种数据链路节点)之间进行传递)

 以太网帧格式:

以太帧结构(格式)

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址)长度是48位。
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP。
  • 帧末尾是CRC检验码

MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节
  • Mac地址是唯一的

ARP协议

ARP协议建立了主机IP地址和MAC地址的映射关系。在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;数据包首先是被网卡接收到再去处理上层协议的,如果接受到的数据包的硬件地址与本机不符,则直接丢弃;因此在通讯前必须获得目的主机的硬件地址。

注:ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。

ARP协议的工作流程

源主机发出ARP请求,并将这个请求广播到本地网段;目的主机接收到广播的ARP请求,发现其中的IP的地址与本地相符,则发送一个ARP应答数据包给员主机,将自己的硬件地址填写应答报中。

ARP数据报格式

  • 硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。
  • 协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。
  • 硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。
  • OP:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。

面试题:

浏览器中输入url后,发生的事情。

参考:https://blog.csdn.net/wuhenliushui/article/details/20038819/ 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值