知识详解-计算机网络

知识详解

一.OSI,TCP/IP,五层协议的体系结构,以及各层协议

OSI(7层):物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

TCP/IP(4层):网络接口层,网络层,运输层,应用层。

五层协议(5层):物理层,数据链路层,网络层,传输层,应用层。

物理层:根据所使用的传输介质不同,制定不同的物理层协议,规定数据的编码方式,传输速率,相关的通信参数。

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

网络层:根据我的理解,有了它,你的数据就能走出一条路。

传输层:它们提供了端到端的数据传输服务,并可在互联网络上的发送主机和目的主机之间建立逻辑连接。

应用层:就像浏览器一样,就是个应用。应用层的许多协议是基于客户服务器方式的。

二.IP地址的分类

A类:0000 0000开头,所以是0-126

127被作为本机回环地址,所以不含到A类里面

B类:1000 0000开头,所以是128-191

C类:1100 0000开头,所以是192-224

D类:1110 0000开头,所以是225-239

E类:1111 0000开头,所以是240-254
在这里插入图片描述

三.各个协议

ARP是地址解析协议(RARP则相反)

网络层

  1. 首先,源主机在自己的ARP缓冲区有ARP列表(以表示IP地址和MAC地址之间的对应关系)

  2. 当源主机发送数据时,首先检查本地ARP列表是否有对应ip地址的目的的MAC地址;如果有,则直接发送数据。如果没有,向本网段所有主机发送ARP数据包(数据包包含:源主机IP地址,源主机MAC地址,目的主机的ip地址)

  3. 当本网段内所有主机接受到ARP数据包后,首先检查ip地址是否是自己的;如果不是,则忽略改数据包;如果是,则取出源主机的ip地址和mac地址写入ARP列表中,如果存在就覆盖。然后将自己的MAC地址写入ARP响应包

  4. 源主机收到ARP响应包后。将目的主机的ip和MAC地址写入ARP列表。如果源主机一直没有收到ARP相应数据包,表示ARP查询失败。

ICMP协议:

网络层协议

作用:用于ip主机、路由器之间传递控制消息(差错通知和信息查询)。《注释:具体可以去笔记网络层去看》

补充:icmp在ip数据包的数据字段,其结构如下图所示,由图可知,icmp差错报文必须包括生成该差错报文的数据报IP首部,还必须至少包括跟在IP首部后面的前8个字节。

在这里插入图片描述

TFTP协议:

应用层

作用:用来在客户机与服务器之间进行简单文件传输的协议。

与FTP协议不同的是,TFTP传输文件时不需要用户登录。端口:69.

HTTP协议:

https://www.cnblogs.com/an-wen/p/11180076.html

应用层

作用:HTTP是一个客户端终端和服务器端请求和应答的标准。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(80)的TCP连接。服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1/1 200 OK",以及返回内容,如请求的文件、错误小心、或者其他信息。

以下是HTTP请求/响应的步骤:

1.客户端连接到web服务器

一个HTTP客户端(通常是浏览器)与web服务器的HTTP端口(80)建立一个TCP套接字连接。

2.发送HTTP请求

通过TCP套接字,客户端向web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据四部分组成。

3.服务器接受请求并返回HTTP响应

web服务器解析请求,定位请求资源。服务器将资源写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4.释放TCP连接

若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connect模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接受请求。

5.客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

在浏览器地址栏键入URL

按下回车之后会经历以下流程:

1.浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址。

2.解析出ip地址后,根据IP地址和默认端口80,和服务器建立TCP连接

3.浏览器发出读取文件的HTTP请求,该请求作为TCP三次握手的第三个报文的数据发送给服务器。

4.服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器。

5.释放TCP连接

6.浏览器将该html文本并显示内容。

NAT协议

网络层

作用:网络地址转换属于广域网技术,是一种将私有地址转换为合法ip的转换技术。

当在专用网内部的一些主机本来已经分配到本地IP地址,但又想和因特网上的主机通信时,可使用NAT方式。这种方式需要在专用网连接到因特网的路由器上安装NAT软件。

DHCP协议

应用层

作用:动态主机配置协议,自动设置IP地址,统一管理IP地址分配。

四:三次握手和四次挥手

4.1 TCP报文段的首部格式

在这里插入图片描述

源端口和目的端口:16位ip地址

序号:32个比特(取值返回0-2的32次方-1),用来指出本TCP报文段数据部分的第一个字节的序号

例子:

占 4 个字节。
TCP 是面向字节流的,在一个 TCP 连接中传输的字节流中的每个字节都按照顺序编号。
例如 100 kb 的 HTML 文档数据,一共 102400 (100 * 1024) 个字节,那么每一个字节就都有了编号,整个文档的编号的范围是 0 ~ 102399。

序号字段值指的是本报文段所发送的数据的第一个字节的序号。
那么 100 的 HTML 文档分割成四个等分之后,
第一个 TCP 报文段包含的是第一个 25kb 的数据,0 ~ 25599 字节, 该报文的序号的值就是:0
第二个 TCP 报文段包含的是第二个 25kb 的数据,25600 ~ 51199 字节,该报文的序号的值就是:25600

根据 8 位 = 1 字节,那么 4 个字节可以表示的数值范围:[0, 2^32],一共 2^32 (4294967296) 个序号。
序号增加到最大值的时候,下一个序号又回到了 0.
也就是说 TCP 协议可对 4GB 的数据进行编号,在一般情况下可保证当序号重复使用时,旧序号的数据早已经通过网络到达终点或者丢失了。

确认号:32个比特,表示期望收到对方下一个报文段的序号值。确认号增加到最后一个后,下一个确认号就又回到了0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认(若确认号为n,表示n-1之前的数据已经收到了,你发序号为n的来吧)

数据偏移:占4个比特,并以4字节为单位。用来指出TCP报文段的数据载荷的部分距离TCP首部有多远。这个字段实际上就是TCP报文首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的,但数据偏移的单位是32位字(即以4字节的字为计算单位)。由于4位二进制能表示的最大十进制为15,因此数据偏移的最大值是60字节,这也是TCP首部的最大自己(即选项长度不能超过40字节)

保留:占0.75个字节(6位)。保留位今后使用,但目前应置为0.

紧急URG:为1时,代表该报文中有紧急数据,应尽快传送。

确认ACK:表示是否前面的确认号字段是否有效。ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1.

推送PSH:接受到PSH=1的报文段,就尽快地交付接受应用进程,而不在等到整个缓存都填满了后再向上交付。

复位RST:为1时,表明TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。还可以用来拒绝一个非法的报文段或拒绝打开一个连接。

同步SYN:为1时,表示这是一个连接请求或连接接受报文。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。

终止FIN:为1时,表明此报文段的发送的数据已经发送完毕,并要求释放运输连接。

窗口:占2字节【大小0-2^16-1】。窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接受方目前允许发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方设置其发送窗口的依据。

例如,发送了一个报文段,其确认号是701,窗口字段是1000.这就是告诉对方:“从701算起,我(即发送方报文段的一方)的接收缓存空间还可接受1000个字节数据(字节序号是701~1700),你在给我发数据时,必须考虑到这一点。”

总之:窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化

检验和:占2个字节。检验和字段检验的范围包括首部和数据这两个部分。用来检验传输过程中是否出现了误码。在计算校验和的时候,要在TCP报文段的前面加上12字节的伪首部。

紧急指针:占2个字节。之后在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,窗口为0时,也可以发送紧急数据。

选项,长度可变,最长可达4字节。当没有使用“选项”时,TCP的首部长度是20字节。用来实现选择确认功能。

                        选项具体有啥:可以看看这个[https://blog.csdn.net/qq\_40016729/article/details/120268801](https://blog.csdn.net/qq_40016729/article/details/120268801)  

填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,是以4字节为单位的)。

4.2 三次握手

在这里插入图片描述

序号(sequence number):seq序号

确认号(acknowledgement number):Ack序号

1.首先客户端向服务端发送一段TCP报文

  • 标记位为SYN,表示“请求建立新连接”;

  • 序号seq=X

    随后客户端进入SYN-SENT阶段(SYN-SENT表示请求连接)

2.服务端接收到来自客户端的TCP报文之后,结束LISTTEN(监听)阶段。并返回一段报文

  • 标志位为SYN和ACK,表示“确认客户端的报文seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”

  • 序号为seq=y

  • 确认号为ack=x+1,(下次期望收到序号)表示收到客户端的序号seq并将其值加1作为自己确认号ack的值;

    随后服务端进入SYN-RCVD阶段(rcvd:收到)

3.客户端接受到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:

  • 标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了)

  • 序号seq=x+1,表示收到服务器端的确认号ack,并将其作为自己的序号

  • 确认号ack=y+1,表示收到服务器端序号seq,并将其值加1作为自己确认号ack的值;

    随后客户端进入ESTABLISHED阶段。

服务器收到来自客户端的“确认收到服务器数据”的TCP报文之后,明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段,进入ESTABLISHED阶段

4.3 四次挥手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH7dWGSL-1663554757837)(images/0.840301970355359.png)]

1.首先客户端想要释放连接,想服务器端发送一段TCP报文,其中:

  • 标记位为FIN=1,表示“请求释放连接”;

  • 序号为seq=u

    随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端向上发送数据,但是客户端仍然能接受从服务器端传输过来的数据

2.服务端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTAB-LISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:

  • 标记位为ACK,表示“接受到客户端发送的释放连接的请求”
  • 序号为seq=v
  • 确认号为ack=u+1,表示(下次想收到的序列号)在收到客户端报文的基础上,将其序号seq值加1作为本段报文确认号ack的值

随后服务器端开始准备释放服务器端到客户端方向上的连接

客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接的请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段

<前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务端方向上的连接了>

3.服务端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文,其中:

  • 标记位为FIN,ACK,表示“已经准备好释放连接了”。注意:这里的ACK并不是确认收到服务器报文的确认报文。

  • 序号为seq=w

  • 确认号为ack=u+1,表示(下次想收到的序列号)在收到客户端报文的基础上,将其序号seq值加1作为本段报文确认号ack的值

    随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。

4.客户端收到从服务器端发出的TCP报文,确认服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文,其中:

  • 标记位为ACK,表示“接受到服务器准备好释放连接的信号”

  • 序号为seq=u+1;表示是在收到了服务器端报文的基础上,将其确认号ack值作为本段报文序号的值

  • 确认号为ack=w+1;表示收到了服务器端报文的基础上,将其序号seq值作为本段报文确认号的值

    客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”

4.4 为什么要进行第三次握手?二次可以吗

  • 为了防止服务器端开启一些无用的连接增加服务器端开销
  • 防止已经失效的连接请求报文突然又传送到了服务端

以上两种是最常见的解释,但是这是不对的。因为有超时重传机制。

其实TCP连接握手,握的是啥?通信双方数据原点的序列号这里解释的很好<车小胖>

如果是四次,相当于把第二次拆成,1.记录客户端发来的seq并命名服务器的ack;2.发送SYN+seq,就啰嗦了。

如果是两次,服务端就不知道客户端是否接受到自己的同步信号了。

4.5 TCP中断可以三次挥手吗

4.6 为什么TCP4次挥手时等待为2MSL?

5 DNS域名系统

https://blog.csdn.net/zhengqijun_/article/details/53811229

6 了解交换机、路由器、网关的概念

7 TCP和UDP的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值