网络

网络简介

1. 网络常见定义

在网络中随着网络的覆盖范围不同,划分出了几种网络:局域网 ,城域网 , 广域网

因特网:更加国际化的,覆盖范围更大的广域网

互联网:许多路由器之间的星型互联

以太网:子网标准

令牌环网:子网标准

2. 软件结构

C/S:Client/Server结构,客户端–>服务器结构 常见:QQ 百度网盘

B/S:Browser/Server结构,浏览器–>服务器结构 常见:谷歌 火狐 IE

无论哪一种都离不开网络支持,网络编程就是通过一定的协议,实现两台计算机的通信的程序。

2.1 网络编程三要素

2.1.1 协议
2.1.2 IP地址

IP:复杂的网络中位置标识一个主机 在网络中唯一标识一台主机

解决ip地址不够用:

ipv4: 无符号32位整数 数量不到43亿

ipv6:128位 16个字节的整数 (根本解决IP地址不够用)为推广 未兼容ipv4

地址包含:源地址 源端口 目的地址 目的端口 协议(通信双方数据解析格式的约定)

双绞线:高低电频

wifi :电磁波

解决IP地址不够用:(未根本解决)

DHCP:动态地址分配 自动获取ip地址

NAT:地址转换技术

2.1.3 端口号PROT

一台主机上唯一标识一个进程 无符号16位整数 (0~65535).使用网络软间时,一打开,操作系统会为网络软件分配一个随机的端口号,或者网络软件在打开的时候向系统要一个指定的端口号。

** 注意:**

​ 1,0-1024被知名协议使用 不建议使用

​ 2,IP+端口号:保证数据准确无误的发送到对方的计算机指定软件上

** 端口特性:** 一个端口只能被一个进程占用。一个进程可以使用多个端口。

常见端口号:1,80端口 网络端口

​ 2,数据库端口: MySql :3306 Oracle:1521

​ 3,服务器:8080 http 协议默认80端口

在网络中的每条数据中都会包含两条信息:源端端口 目的端端口

3.网络通信协议(通信双方数据解析格式的约定)

在这里插入图片描述

3.1 网络通信环境中的协议分层

OSI七层参考模型(网络开放互联模型):物理层 《 数据链路层《 网络层《 传输层《 会话层《 表示层 《应用层(对网络划分太细致,不容易实现)

**TCP/IP 五层模型 ** : 物理层《链路层《网络层《传输层《应用层

程序员:应用层

网卡:传输层—>网络层

链路层—>物理层

分层常用协议主要作用
应用层HTTP FTP TFTP SMTP SNMP DNS应用程序间数据沟通
传输层TCP UDP负责数据能够从发送端传输到接收端
网络层(核心层)IP
数据链路层两个设备之间进行传递数据
物理层
3.1.1 应用层:负责应用程序之间的数据沟通;

知名协议:HTTP(超文本传输协议)/FTP/DNS/DHCP

HTTP协议格式:
在这里插入图片描述

网址-URL 统一资源定位符 : https://www.baidu.com/ 默认80端口

​ 例子: URL:http://user:pass@ip:port(80)/uri?query_string

在这里插入图片描述
query_string(查询字符串 ): 以键值对的形式储存在服务器中,每个键值对之间用& 间隔。

URL编码/解码:

查询寻字符串是用户提交给服务器的数据信息,这些提交的数据中若是出现特殊字符,则有可能与url中间隔符产生歧义导致url解析失败:因此查询字符串不能出现特殊字符

若是提交的数据中真的有特殊字符需要对查询字符串中的数据进行url编码操作;编码之后的数据在对对端需要进行url解码操作

url编码:将特殊字符每一个字节转换为16禁止数字字符串,并且为了表明这两个字符是经过了url编码后的数据,需要在转换后的数据前加上% ±->%2b

url解码:当遇到%,则认为紧跟其后的两个字符需要转码,对紧跟其后的两个字符转换位数字,将第一个字符转为数字左移4位与第二个字符转换后的数据进行相加 %2b->(‘2’-‘0’)<<4+(‘b’-‘a’+10)->43 ->+

客户端请求消息:
在这里插入图片描述
服务器响应消息:在这里插入图片描述

首行:

​ 请求首行

​ 请求方法 :GET/POST get没有正文(更偏向于获取信息) 提交的数据在url的查询字符串中

​ URL

​ 协议版本:0.9/1.0/1.1/2

​ 响应首行:协议版本 响应状态码 状态吗描述信息

​ 响应状态码:1**(表示描述信息)/

​ 2** (正确处理了客户端请求 )/ 200

​ 3**(重定向 请求资源已被移位 请其他网址)/ Location指定转移位置

​ 301 永久重定向 302 临时重定向

​ 4**(描述客户端错误)/ 例如404 :配置没有找到

​ 5** 服务器错误

​ 更多详见:https://www.runoob.com/http/http-status-codes.html

头部: 以 一个个 (key: value )组成的键值对,并且各个键值对之间以\r\n作为间隔

​ Connection : Content-Length 只要有正文就必须有 正文长度 避免对端应该接受的数据长度

​ Transfer -Encoding:chuncked/ : 每次发送数据前,先发送长度。

​ Content-Type:正文数据类型 告知如何处理

​ User_Agent:

​ 3**/Location:重定向地址

​ Accept—Encoding :告诉对端 可接受压缩信息

​ Accept-language:告诉对端可接收的语言格式

​ Reference:告诉对端该页面是从哪个页面跳过来的

​ Set—cookie: 将会话ID传递至客户端

​ cookie :是存储在本地浏览器,而session存储在服务器。

空行:/n /r —通过\n \r识别头部信息间隔头部和结尾 通过头部中的Content—length

正文:客户端提交的数据,服务端响应数据

3.1.2 传输层:负责端与端之间的数据传输;

两个进程之间的数据传输(封装端口信息)

知名协议: TCP /UDP

端口(PORT端口:无符号16位 0-1023被知名协议使用 不建议使用:在一个主机上标识一个进程 ( 标识接收到的数据应该交给哪个进程处理)

一个端口只能被一个进程占用,一个进程可以使用多个端口

**五元组:**在网络通信中每一条数据都必须带有一些关键信息(源IP/源端口/目的IP/目的端口/协议)

​ 用于标识网络中的一条通信

协议

UDP协议:用户数据报协议:特性 : 无连接,不可靠,面向数据报

**无连接,不可靠:**通信时不需要建立连接,只需要知道对端地址信息就可以方送数据,并不关心对方是否收到数据、收到数据是否有序 这种方式是不可靠的 。数据发送后会丢失

面向数据报:向上层交付数据时,只能整条向应用层交付

UDP协议字段:1) 十六位源目的端口:

​ **2)十六位数据报长度:**用于标识这个UDP数据报的长度(包含头部)

在这里插入图片描述

​ 决定特性:1,面向数据报 2,udp每次直接传输的报文大小是有长度限制的 ,不能超过64k-8.

16位的数据报长度决定了一个udp协议的数据data长度不能大于64k-8 ;否则发送失败。

因此当数据长度大于64k-8k时,就需要用户在应用层进行数据分包,将数据分为一个个小于64-8大 小的数据段; UDP 并不保证数据有序到达,

用户每次调用发送接口发送数据的时候,udp会直接为这条数据封装udp头部信息,直接发送出去

为了防止用户接收半条数据,导致udp剩余数据无法根据协议字段中数据报长度确定数据长度,因此udp规定数据只能整条交付。

udp不保证数据有序,因此若是应用层分包还需要用户在应用层进行包序管理

应用层在传输层基于udp实现的协议:DNS/DHCP

​ **3)十六位检验和:**二进制反码求和 校验接收与发送的数据是否一致

3.1.2.1 TCP 协议:面向连接,可靠传输 ,面向字节流

TCP三次握手与四次挥手流程以及状态变化
在这里插入图片描述

为什么握手是三次而挥手是四次?

两次不安全,有可能SYN会延迟,缺乏状态保护的情况下,收到一个SYN就会建立一个新的socket,完整的状态保护避免对一个客户端创建多个socket

两次不安全,服务端无法通过客户端的syn确定客户端具有收发数据的能力,需要客户端再次进行确认。

挥手为什么是四次?

被动关闭方,收到fin之后对其进行ack回复,但是不能直接关闭socket,因为这时候用户可能正在处理数据(socket接收缓冲区中可能还有堆积的数据),需要用户来确认什么时候关闭socket 发送fin;一次ack和fin不能放在一起。

若是三次握手失败,服务端如何处理?

服务端超时等待ACK之后,向客户端发送RST报文,然后释放新建的socket资源

主动关闭方TIME_WAIT状态的作用?

1,假设没有TIME_WAIT而是直接closed状态,释放socket资源会造成什么危害?

在主动关闭方发送的最后一次ACK丢失的情况下:

如果主动关闭方使用相同的地址信息立即重启

1).收到被动关闭方超时等待后重发的fin包,对新连接造成影响

2).发送SYN请求,但是对方等待的是ACK,因为状态不匹配而导致对新连接造成影响

2,因此主动关闭方需要等待一段时间:2MSL(报文最大生命周期吗 30s)时间,为了让网络中延迟报文(后续重传的fin请求和ack)都消失在网络中不会对后续连续造成影响。

若是对方重发fin请求,可以对其再次进行确认回复

大量TIME_WAIT解决方案:调整msl时间,设置套接字选项(地址复用)

**可靠传输:**面向连接是可靠传输的前提,但是不保证可靠传输

面向连接:

保证可靠传输,只能保证数据到达,不保证有序到达

​ 确认应答机制:对每条数据,向发送方进行确认回复,

​ 超时重传机制:发送数据后等待一段时间(200ms)若是没有收到确认回复,则认为数据丢失,进行重传

协议字段中的包序:序号+确认序号 (保证数据有序的的向应用层交付)

协议字段中的校验和:校验接收的数据与发送的数据是否一致,不一致则发送重传请求,否则确认回复

TCP为了保证可靠传输,牺牲了部分性能,(有些性能的损失是没有必要的,比如ack丢失导致的重传) tcp又采用了几种机制来避免无谓的性能损失以及提高性能的方法

1,滑动窗口机制:

流量控制:;通过协议字段中的窗口大小(不会大于接收方的接收缓冲区中剩余空间大小)字段控制发送方的数据大小;避免因为发送过快而接收数据处理过慢导致接收缓冲区数据放满后,大量的数据丢失重传降低的性能

窗口大小在每次对数据进行确认回复的时候都会进行重新协商。是、

每一条确认回复中的确认序号,都要保证之前的数据已经完全收到,,没有收到第一条回复,但是收到第二条回复,认为第一和第二条都已经正确传输,避免因为ack丢失而导致的数据重传

​ **快速重传机制:**接收方收到了第二条数据,但是没有收到第一条,则初步认为第一条数据丢失,则立即发送第一条数据的重传请求,并且连续发送三次

当发送方连续收到三次重传请求的时候,就不需要等待超时,直接对这条数据进行重传,连续三次,是因为要避免因为网络阻塞,数据延迟到达而导致的重 传。

拥塞控制:网络通信开始时并不会直接发送窗口大小的数据,而是以一种慢启动,快增长的形式进行数据传输,起到一个网络探测在作用,避免开始通信时因为网络状况不好导致的发送数据越多,丢失数据越多的重传性能损失,在快增长的过程中,若出现丢包则初始化拥塞窗口大小,重新开始探测网络状况。

**2.延迟应答机制:**接收方接收数据若是立即回复,则窗口大小会降低,会导致传输速度降低,因此,接收方接收到数据后,并不立即回复,而延迟 一会(不超过500ms)在这期间,用户可能从将数据从缓冲区中取出,可能尽量大的能力保证窗口大小,保证传输速度不会降低;

**3.捎带应答机制:**每一次接收方接收到数据之后对数据进行确认回复,若是单独发送一个数据包(仅仅包含一个tcp报头)是不划算的,解决方案就是将要进行的确认回复和即将要发送的数据合并到一起进行发送,就可以省略一个tcp报头的发送,减少网络中不必要的流量信息。

tcp的可靠传输:连接管理,确认应答,超时重传,序号/确认序号,校验和

滑动窗口机制(流量控制,拥塞控制,快速重传机制),延迟应答,捎带应答 来提高性能

**面向字节流:**数据不会直接发送,而是放到发送缓冲区中,操作系统选择一个合适的时机将合适大小的数据以字节流的形式发送出去,对方接收数据时,可以一次性接收所有数据,也可以一次接收一点,份多次接收

tcp面向字节流特性:传输灵活,但是会造成粘包问题

粘包问题:TCP传输的数据在发送缓冲区或接收缓冲区中堆积,因为TCP数据收发的灵活性,倒是有可能多条数据当做一条接收;(两条数据的粘连)

TCP粘包的本质原因:TCP在传输层,传输层对数据的格式并不关心,对数据之间没有明显的边界区分,因此会造成数据的粘包。

解决粘包问题:粘包是TCP在传输层对数据边界不敏感,因此需要用户在应用层进行数据边界管理

​ 特殊字符间隔(HTTP),定长数据, 不定长数据在应用协议头中声明数据长度(UDP)。

4.TCP连接管理中的保活机制

​ 若是通信双方,长时间(7200s)没有数据往来,则会向对方发送一个保活探测数据包,要求对方对这个保活探测数据包进行回复,若是收到回复:则认为连接正常,若是间隔(75s)发送连续多次(9次)没有收到回复,则认为连接断开。

TCP异常连接断开的情况:断电

TCP协议字段:

16位源/目的端口:负责端与端之间数据传输

32位序号/确认序号:保证数据有序交付

4位头部长度:解析时获取TCP头部,以4字节为单位(tcp头部最小20字节,最大60字节)

6位标志位:URG/ACK/PSH/RST/SYN/FIN

16位窗口大小:实现滑动窗口,以及进行流量控制

16位校验和:保证数据一致性

16位紧急指针:带外数据

40字节的选项数据:可有可无。

3.1.3 网络层:负责地址管理与路由选择;IP:路由器:路由选择

知名协议:IP协议 设备:路由器:实现数据的路由转发;

**路由选择:**在复杂的网络环境中,为每一条数据选择一条合适的传输路径,最佳的路径依托于良好的地址管理

网络中的IP地址不能随意分配,因为随意分配很容易造成IP地址冲突;因此IP地址需要得到合理的管理

IP地址分为两个部分: 网络号和主机号

网络号: 保证相互连接的两个⺴⽹网段具有不同的标识;

​ 一个路由器可以组件一个局域网,这时路由器向局域网中的主机分配IP地址的时候,就必须带有自己网络 的标识—网络号。 这时候只需要将每个网络的网络号规范起来就可以避免IP地址冲突

主机号: 同⼀网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

​ 在一个局域网中,路由器向主机分配IP地址,还要能够在局域网中标识这个主机,这个标识叫主机号

保证相邻的网络不能具有相同的网络号就可以尽可能的避免IP冲突

网址的划分:

**早期划分方式:**A/B/C/D/E

A类地址:低24位是主机号 A类网络地址主机号有2^24 地址范围0.0.0.0~127.255.255.255

B类地址:低16位是主机号,B类网络地址主机号有65536个 地址范围128.0.0.0~191.255.255.255

C类地址:低8位是主机号,C类网络地址主机号有256个 地址范围192.0.0.0~223.255.255.255

D类地址

**现在解决方案-CIDR:**加入了一个字段叫子网掩码。通过子网掩码来对网络进行划分

子网掩码:由一串连续的二进制1组成的一个无符号4个字节的整数

192.168.122.132 255.255.255.0

作用:

子网掩码与IP地址相与能够得到网络号 192.168.122.132 & 255.255.255.0 =192.168.122.0

子网掩码取反(得到最大主机号)可以得到网络中主机号的个数 ~255.255.255.0 = 255+1 =256

现在有一个C类网络地址,将这个C类网络划分出20个子网,请问每个子网的子网掩码是多少,IP地址范围是多少,以及各个网络的网络号是多少

C类网络地址有256个主机号,平均划分20个子网,每个子网中主机号个数256/20

每个子网中主机号个数是12,子 网掩码是连续的1,因此12取反无法得到连续1 ,在每个子网主机号能少 ; ~0.0.0.7 = 255 .255.255.248

~00001011 = 11110100

~00000111 = 11111000

在一个完网络中,并不是所有的主机号都能分配给主机

主机号全为0的IP地址:网络号 ,用于标识一个网络

主机号全为1的IP地址–udp广播地址

127.0.0.0 本机虚拟回环网卡地址 用于本机的网络测试

在RFC1918中进行规定,用于组件私网的网段也不能随意使用。只有以下几个网段可以用于组件私网:

[外链图片转存失败(img-fRRACz2j-1563699606846)(E:\javaclass\不能用作组件私网.png)]

相邻的网路不能使用相同的网络号

路由选择:

路由表:每个路由器上都有一个路由表,记录的连接在路由器上的网络

ip协议字段

​ 4位协议版本:IPV4/IPv6

​ 4位头部长度:IP报文头最大长度69个字节(以4字节为单位)

​ 8位服务类型:4位TOS字段(最小延时/最大吞吐量/最高可靠习性/最小成本) 1位保留位

​ 16位报文长度:限制一个IP报文最大长度64K udp 数据最大长度 64k—20-8

MTU :最大传输单元

当mtu<udp 数据长度<64k-=20-8 ,链路层则不支持大于mtu大小数据传输,这时候网络先获取下层mtu大小,在网络层对数据进行分析。

16位标识:udp数据可能在网络层进行数据分片,这个标识则可以指定当前分片属于哪个udp数据包

13位片偏移量

3.1.4 数据链路层:负责相邻设备之间的数据传输(MAC地址,用于定义相邻设备);
  • 源地址和目的地址:网卡的硬件地址(也叫MAC地址),长度是48,是在网卡出厂时固化的
  • 帧协议类型字段有三种值:分别对应IP、ARP、RARP
  • 帧末尾是CRC校验码

MAC地址

  • MAC地址用来识别数据链路层中相连的结点
  • 长度为48位,及6个字节。一般用16进制数字加冒号的形式来标识
  • MAC地址在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)

DNS

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
  • 如果新计算机接⼊网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.

协议:Ether;设备: 交换机(实现相邻设备数据之间的固定转发)

协议:Ether

3.1.5物理层:负责光电信号的传输;

以太网协议:使用的物理介质规定;设备:集线器HUB:数据集中转发,信号放大。

以太网:

”以太网”不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容:例如:规定了网络拓扑结构,访问控制方式,传输速度等。

以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等

以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无限LAN等

以太网的帧格式:
在这里插入图片描述

4 .网络传输基本流程

4.1 网络传输流程图

同一个网段内的两台主机进行文件传输
在这里插入图片描述
两台计算机通过TCP/IP协议通讯的过程
在这里插入图片描述

跨网段的主机的文件传输。数据从一台计算机到另一台计算机传输过程中要经过g一个或多个路由器
在这里插入图片描述

4.2 数据包封装和分用

1.不同的协议层对数据包有不同的称谓,在传输层叫:段;在网络层叫:数据报;在链路层叫:帧

2.应用层数据通过协议栈发送到网络上时,每层协议都要加上一个数据首部,称为封装

3.首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息

4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的”上层协议字段“将数据交给对应的上层协议处理
在这里插入图片描述

数据分用过程
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值