计算机网络知识

目录

1.UDP用户数据报协议

2.TCP传输控制协议

2.1TCP简介

2.2TCP的连接建立 三次握手

2.3TCP的连接释放 四次挥手

2.3以字节为单位的滑动窗口

2.4流量控制和拥塞控制

3.DNS的解析过程

4.计算机网络体系结构

5.http和https协议

http协议

https协议

6.IP协议

6.1IP地址的表示方法

6.2地址解析协议arp

6.3IP数据报的格式

6.4ICMP网际控制报文协议


1.UDP用户数据报协议

UDP只在IP的数据报服务上增加了复用、分用以及差错检测的功能。

主要特点:

1.无连接 2.尽最大努力交付 3.面向报文 4.没有拥塞控制 5.支持一对一、一对多、多对多的交互通信 6.首部开销仅为8字节

复用:把收到的udp用户数据报组装成不同的ip数据报,发送到互联网。

分用:网络层收到ip数据报后,提取数据部分,然后根据首部中的目的端口号,分别传送到对应的端口,以便上层应用进程到端口读取数据。

差错检测:将全零放入检验和字段。再把伪首部以及udp用户数据报看成是由许多16位的字串接起来的。若udp的数据部分不是偶数,则要填入一个全零字节(不发送)。然后按二进制反码计算出16位字的和。将和的二进制反码写入检验和字段后,发送。接收方,将伪首部以及可能的全零字节一起,按二进制反码求这些16位字的和。当无差错时其结果应全为1.

2.TCP传输控制协议

2.1TCP简介

特点:1.面向连接的运输层协议 2.只能由两个端点 3.提供可靠交付的服务 4.提供全双工通信 5.面向字节流

tcp的连接端点:socket=(ip地址:端口号)

首部格式:

2.2TCP的连接建立 三次握手

假设主机A运行的是TCP客户程序,而B运行的是TCP服务器程序,最初两端的TCP进程都处于CLOSED状态。

A主动打开连接,B被动打开连接。

一开始B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器进程就处于LISTEN状态,等待客户的连接请求。

1.第一次握手 A的TCP客户进程创建传输控制块TCB,向B发出连接请求报文段,首部中的同步位SYN=1,初始序号seq=x,x随机产生,TCP客户进程进入SYN-SENT(同步已发送)状态。不能携带数据。

SYN=1,ACK=0代表这是一个连接请求报文段。

2.第二次握手 B收到连接请求报文后,如果同意建立连接的话,则向A发送确认。生成一个序号seq=y,然后确认号为ack=x+1,确认建立的是同一个连接,再将SYN和ACK置为1,TCP服务器进程进入SYN-RCVD(同步收到)状态。不能携带数据。

SYN=1,ACK=1,代表这是一个连接接受报文。

确认ACK:仅当ACK=1时表明确认号字段有效,当ACK=0时确认号字段无效。TCP规定在连接建立后所有传送的报文段都必须把ACK置为1

确认号(ack)=N,则表明:到序号N-1为止的所有数据都已正确收到

3.第三次握手 TCP客户进程收到B的确认后,还要向B给出确认。ACK置为1,确认号ack=y+1,序号seq=x+1,A进入ESTABLISHED(已建立连接状态),这次可以携带数据。

B收到A的确认后也进入ESTABLISHED(已建立连接状态)

Q:为什么A最后还要发送一次确认呢?

A:为了防止已失效的连接请求报文段突然又传送到B,因而产生错误。即A发送一个连接请求报文段,由于网络节点长时间只留了,导致延误到连接释放后才到达B。B收到此失效的连接请求报文段,误以为是A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,假定不采用三次报文握手,那么只要B发出确认新的连接就建立了。由于A没有发出建立新连接的请求不理睬B的确认,也不会发送数据给B,但B却以为新的传输连接已经建立了,并一直等待A发送数据,这样就导致许多资源白白浪费。采用三报文握手可以避免这样的情况。

Q:为什么不能是四报文握手?

A:B发送给A的报文段,也可拆分成两个报文段。可以先发送一个确认报文段(ACK=1,ack=x+1),然后再发送一个同步报文段(SYN=1,seq=y)。这样是四报文握手但是效果一样,没有必要。

2.3TCP的连接释放 四次挥手

假设A和B都处于ESTABLISHED状态

1.第一次挥手:A的应用进程向其TCP发送释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FIN置为1,seq=u,它等于前面已传送过的数据的最后一个字节的序号+1,A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。

FIN=1表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。

2.第二次挥手:B收到连接释放报文段后发出确认,ACK=1,ack=u+1,seq=v,等于B前面已传送过的数据的最后一字节的序号+1。然后B就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程通知高层应用进程,A到B这个方向的连接释放了,TCP处于半关闭状态,即A已经没有数据要发送了,但B若发送数据A仍要接收。

A收到B的确认后进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段

3.第三次挥手:B把数据发送完毕后或者B已经没有数据需要发送,其应用进程就通知TCP释放连接,B向A发送释放报文段,FIN=1,seq=w(在半关闭状态B可能又发送了一些数据),ack=u+1。B进入LAST-ACK(最后确认)状态等待A的确认

4.第四次挥手:A在收到B的连接释放报文段后,向B发送确认,ACK置为1,ack=w+1,seq=u+1,进入TIME-WAIT(时间等待状态),经过时间等待器设施后的2MSL后,A进入CLOSED状态。

MSL叫做最长报文段寿命

Q:为什么A要在TIME-WAIT状态必须等待2MSL的时间?

A:1.为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段可能会丢失,因而使处在LAST-ACK状态的B收不到已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。

    2.防止已失效的连接请求报文段出现在本连接,A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续时间内所产生的所有报文段都从网络中消失。

扩展:TCP还有一个保活计时器。在客户已经主动与服务器建立TCP连接,但后来客户端的主机突然出现故障。服务器以后就不能接受到客户发来的数据。因此应当有措施使服务器不要在白白等待,这就是保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常为2h,若2h没有收到客户的数据,服务器就发送一个探测报文段,以后则每个75s发送一次,若一连发送10个探测报文段后客户仍无响应,服务器就认为客户端出了故障,关闭该连接。

2.3以字节为单位的滑动窗口

TCP的滑动窗口是以字节为单位的。

接下来讨论A发送给B的情况

A的发送窗口:

1.在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。

2.描述一个发送窗口的状态需要三个指针:p1,p2,p2。

        2.1 p1之前的数据是已发送并已收到确认的部分

        2.2 p3之后的数据是不允许发送的部分

        2.3 p3-p1=A的发送窗口

        2.4 p2-p1=已发送但尚未确认收到的字节数

        2.5 p3-p2=允许发送但尚未发送的字节数

B的接受窗口:

分为三个部分1.已发送确认并交付主机2.允许接受(中间可能有未按序收到的数据)3.不允许接受

2.4流量控制和拥塞控制

流量控制:发送方的发送速率不要太快,要让接收方来得及接收收。利用滑动窗口进行控制发送方的发送窗口不能从超过接收方给出的接收窗口的数值。TCP的窗口单位是字节,不是报文段。TCP为每一个连接设有一个持续计时器。只要TCP的连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。

拥塞控制

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变差。

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。

与流量控制的区别:拥塞控制是一个全局性的过程涉及到所有的主机、路由器。流量控制是指点对点通信量的控制。

1.慢开始

在刚刚开始发送报文段的时候,初始拥塞窗口(cwnd)设置为不超过2-4个最大报文段(SMSS)的数值,每收到一个新的报文段的确认,可以把拥塞窗口增加最多一个SMSS的数值。拥塞窗口cwnd的增加量=min(N,SMSS)。cwnd=1,cwnd=2,cwnd=4,cwnd=8。为了避免cwnd增长过快引起网络拥塞。设置一个满开始门限ssthresh。

cwnd<ssthresh,使用慢开始

cwnd>ssthresh,停止使用慢开始算法而改用拥塞避免算法

cwnd=ssthresh,既可以使用慢开始算法也可以使用拥塞避免算法

2.拥塞避免算法

让拥塞窗口缓慢cwnd缓慢增大。每经过一个往返时间RTT,发送方的拥塞窗口的大小就加1,而不是像慢开始阶段那样加倍增长

3.快重传

让发送方尽快知道个别报文段的丢失,

要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即便收到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方只要一连收到3个重复确认,就可以i知道现在并未出现网络拥塞,而只是接收方少收到一个报文段,而立即重传。

4.快恢复

发送方知道现在只是丢失了个别报文段,于是比启动慢开始,而是执行快恢复算法。发送方第二次调整门限值,使得ssthresh=cwnd/2=8,同时设置cwnd=ssthresh=8,并开始执行拥塞避免算法。

3.DNS的解析过程

域名系统DNS是互联网使用的命名系统,用来把便于人们使用的机器名字转换成IP地址。

1.主机向本地域名服务器的查询一般采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的ip地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机进行下一步的查询。因此递归查询返回的查询结果要么是查询的ip地址,要么报错表示无法查询到。

2.本地域名服务器向根域名服务器的查询通常采用迭代查询。当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所查询的ip地址,要么告诉本地域名服务器下一步应该向哪一个域名服务器查询(而不是替本地域名服务器进行后续的查询),根域名服务器通常是把自己知道的顶级域名服务器的ip地址告诉本地域名服务器,让本地域名服务器在想顶级域名服务器查询,顶级域名服务器要么告诉ip地址,要么告诉下一步应当向哪个权限域名服务器查询,就这样进行迭代查询,最后知道了解析域名的ip地址,然后把结果给发起查询的主机。当然本地域名服务器也可以用递归查询,这取决于最初的查询请求报文设置要求使用哪一种查询。

注意:查询过程中使用udp报文为了减少开销,udp是面向无连接的,但是速度快。

扩展:为了提高DNS的查询效率,并减轻根域名服务器的荷载和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(有时也称为告诉缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

4.计算机网络体系结构

OSI的七层协议概念清楚,理论完善,但复杂不实用。

TCP/IP四层协议,应用广泛。

五层协议便于阐述原理。

五层协议简单介绍各层作用

1.应用层:通过应用进程间的交互来完成特定网络应用。这里进程指的是主机中正在运行的程序。支持的应用层协议如域名系统DNS,支持万维网的应用HTTP协议,支持电子邮件的SMTP协议,等待。交互的数据单元称为报文。

2. 运输层:向两台主机中进程之间的通信提供通用的数据传输服务。运输层具有复用和分用的功能。复用就是多个应用层进行可同时使用下面运输层的服务,分用就是把收到的信息分别交付上面应用层中的相应进程。运输层主要使用以下两种协议1.传输控制协议TCP,提供面向连接的,可靠的数据传输服务,其数据传输的单位是报文段。2.用户数据报协议UDP,提供无连接的尽最大努力的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报

3.网络层:为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据封装成分组或包进行传送。

4.数据链路层:用于两台主机之间的数据传输,需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的ip数据报组装成,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。

5.物理层:传输的数据的单位是比特。比特流的传送。

5.http和https协议

http协议

http协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎么把文档传送给浏览器。

http使用了面向连接的tcp作为运输层协议,保证了数据得可靠传输。

http协议是无状态的。同一个客户第二次访问同一个服务器的页面时,服务器的响应与第一次被访问时的相同。服务器并不记得曾经访问过这个客户。

http1.0的请求一个万维网文档到收到整个万维网文档的时间估算。

1.三次握手的第三次握手客户端讲http请求报文发给服务器

2.服务器收到后将所请求的文档作为响应报文返回给客户端

所以时间=文档的传输时间+2倍往返时间RTT

RTT(Round-Trip Time),往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

http1.1采用持续连接(服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接商传送后续的HTTP请求报文和响应报文)

http1.1有两种工作方式

1.非流水线方式:客户在收到前一个响应后才能发送下一个请求。因此,在tcp连接已建立后,客户每访问一次对象都需要用去一个往返时间rtt。这比非持续连接要用去两倍rtt的开销节省了建立tcp连接所需要的一个rtt时间。但非流水线方式在服务器发送完一个对象,其tcp连接就处于空闲状态,浪费了服务器资源。

2.流水线方式:客户在收到http的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有对象只需要花费一个rtt时间。流水线工作方式使tcp连接中的空闲时间减少,提高了下载文档效率。

http2是http1.1的升级版本

特点如下

1.http2协议把服务器发回的响应变成可以并行地发回(使用同一个tcp连接)。

2.http1.1客户收到服务器发回的响应后,原来建立的tcp连接就释放了。如果客户还要继续向该服务器发送新的请求,就必须重新建立tcp连接。http2允许客户复用tcp连接进行多个请求,这样就节省了tcp连续多次建立和释放锁花费的时间

3.http/1.1的请求和响应报文是面向文本的。当客户连续发送请求并收到响应时,在tcp连接上传送的http报文首部成为不小的开销。在这些首部中有很多的字段是重复的。为此,http2把所有的报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,大大减小了首部的开销,提高了传输效率。

https协议

是以安全为目标的http通道,在http的基础上通过传输加密和身份认证保证了传输过程的安全性。在http的基础下加入tls/ssl协议,https存在不同于http的默认宽口及一个加密/身份验证层(在http与tcp之间)。默认端口443,这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全明过的通讯。

原理

1.client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机数1和客户端支持的加密算法。

2.server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。

3.随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一堆公钥和私钥。传送证书,这个证书其实公钥,只是包含了很多信息,如证书的颁发机构,过期时间,服务端的公钥,第三饭证书认证机构的签名,服务端的域名信息等内容。

4.客户端解析证书,这部分工作是由客户端的tls来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,吐过发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(预主秘钥)

5.客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。让后通过证书的公钥加密会话秘钥。

6.传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥

7.服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。

8.客户端通过会话秘钥加密亿条信息发送欸客户端信息,主要验证服务端是否正常接受客户端加密的信息

9.同样服务端页会通过会话秘钥加密一条消息传回给客户端,如果客户端能够正常接受则代表ssl层连接建立完成了。

6.IP协议

6.1IP地址的表示方法

分类的ip地址

单播地址:

A类 网络号:8位 第一位固定为0 127(01111111)保留做本地回环测试

B类 网络号:16位 前二位10

C类 网络号:24位 前三位110

多播地址:

D类(一对多通信)

CIDR无分类编址

IP地址={<网络前缀>+<主机号>}

如128.14.35.7/20 二进制前20位是网络前缀,后面12位是主机号

子网掩码:一连串1和接着的一连串0组成,斜线后面的数字就是地址掩码的个数

IP地址&子网掩码=网络地址

6.2地址解析协议arp

解决:知道一个机器的ip地址查找对应的mac地址

每个主机设置arp高速缓存,存有本局域网内各主机和路由器的ip地址到mac地址的映射表(存在生存时间)

主机A向本局域网内主机B发送ip数据报

1.arp缓存查到 直接将mac地址写入mac帧发送

2.未查到 广播arp请求 ip地址相同的主机B返回响应请求 此时B的arp缓存记录A的ip地址和mac地址 在A收到B的响应请求后 A的arp缓存记录B的ip地址和mac地址

对于不同局域网则根据路由器的转发表 转发到对应的局域网

6.3IP数据报的格式

ipv4

IP数据包=首部+数据

1.版本 4位 ipv4 ipv6

2.首部长度 4位 单位是4字节

3.区分服务 8位

4.总长度 首部+数据和的总长度 16位

MTU最大传送单元  数据字段的最大长度 常用以太网1500字节 过长进行分片处理

5.标识 16位 相同标识字段的值可以在分片后重装成原来的数据包

6.标志 3位 目前仅前两位有意义 最低位MF=1表示后面还有分片 中间位DF=1表示不能分片

7.片偏移 13位 分片后,某片在原分组中的相对位置。8个字节为偏移单位

8.生存时间TTL 8位 可以经过多少个路由器

9.协议 8位 数据报数据采用何种协议

10.首部校验和 16位 只检验数据包首部,不包括数据部分

11.源地址 32位

12.目的地址 32位 

最长前缀匹配:在采用CIDR编址时,如果一个分组在转发表中可以找到多个匹配的前缀,那么就应当选择前缀最长的一个作为匹配的前缀。

6.4ICMP网际控制报文协议

提高交付成功的机会有效转发ip数据报

1.ICMP差错报文

  1.1终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文

  1.2时间超过 当路由器收到生存时间按位零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。(tracert)

  1.3参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文

  1.4改变路由(重定向) 路由器把改变路由报文发送给主机,让主机知道下次应将数据包发送欸另外的路由器

2.ICMP请求报文

  2.1回送请求或回送回答 ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。(Ping)

  2.2时间戳请求或时间戳回答 在ICMP时间戳请求报文发出后,就能够收到对方响应的ICMP时间戳回答报文。利用报文中记录的时间戳发送方就能计算出当前网络的往返时延。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值