网络编程基础

网络基础

OSI七层协议

cs与bs

1.硬件C/S架构(打印机)
2.软件C/S架构
    互联网中处处是C/S架构
    如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)
    腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)
# C/S架构与socket的关系:
    我们学习socket就是为了完成C/S架构的开发

什么是网络?

网络=物理连接介质+互联网通信协议
# OSI七层协议
     应用层
     表示层
     会话层
     传输层
     网络层
     数据链路层
     物理层
# 又可以分为5层 将应用层 表示层 会话层合在了一起
     应用层
     传输层
     网络层
     数据链路层
     物理层
# 其实还是可以在分为4层,将 数据链路层和物理层合为了物理层,但是我们主要研究5层就好了

###

发包与解包过程

1.'应用层'产生'数据'并发给传输层
2.'传输层'根据tcp/udp协议,增加'tcp'/'udp'报头然后发给网络层
3.'网络层'根据ip协议,增加'IP报头'然后发给数据链路层
4.'数据链路层'根据internet以太网协议增加'帧头'然后发送给物理层
5.'物理层'将以上所有数据改为'比特位',发送给交换机
6.'交换机'根据以上所有过程提供的ip地址,mac地址等信息,以自己的ip地址作为源地址发送给公网,公网发给'目标主机'。或者在本地局域网,按照ip/mac地址发送给目标主机。
5.目标主机物理层根据交换机提供的比特位转换成数据(帧头、ip报头、tcp/udp报头、数据)交给数据链路层
4.数据链路层解包帧头后,交给网络层解包
3.网络层根据ip协议解包ip报头后,交给传输层。
2.传输层根据tcp/udp协议解包tcp报头后,转交给目标应用层
1.应用层收到数据

为什么要有网络

# 为了方便数据的传输/通信,之前叫信息高速公路,现在叫互联网

物理层

# 功能:主要是基于电器特性发送高低电压,高电压对应数字1,低电压对应数字0

数据链路层

数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思
#  数据链路层的功能:定义了电信号的分组方式

以太网协议

早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,#  即以太网协议ethernet
ethernet规定:
# 1.一组电信号构成一个数据包,叫做'帧'
# 2.每一数据帧分成:报头head和数据data两部分
head包含:(固定18个字节)
发送者/源地址,6个字节
接收者/目标地址:6个字节
数据类型:6个字节
data包含:最短46字节,最长1500字节
数据包的具体内容:
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
​
1.以太数据称之为数据帧,分为head+data两部分,其head长度固定
2.规定但凡是接入互联网的主机必须有一块网卡,网卡上有一个mac地址,且世界唯一
3.以太网协议的通信采用的是广播的通信方式==》计算机通信靠吼

mac地址

#  head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接受端的地址便是指网卡的地址,即mac地址
mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

广播

有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)
#  ethernet采用最原始的方式,广播的方式进行通信,既计算机通信基本靠吼。

网络层

网络的由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题,这会是一种灾难

ip协议

规定网络地址的协议叫'ip协议',它定义的地址称之为ip地址,广泛的采用的v4版本既ipv4,规定网络地址由'32位2进制'表示
范围:0.0.0.0-255.255.255.255
一个ip地址通常携程四段十进制数例:172.16.10.1
#  ip地址分成两部分:
#  网络部分:标识子网
#  主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2冰不能确定二者处于同一个子网
#  IP+MAC+端口=》标识全世界范围内独一无二的一个基于网络通信的软件
​
IPV4目前主流,地址不够用了,正在推IPV6

子网掩码

所谓 子网掩码 ,就是标识自网络特征的一个参数。它在形式上等同于ip地址,也是一个32位二进制数字,它的网络部分全部位1,主机部分全部位0。比如,ip地址172.16.10.1,如果已知网络部分是前23位,主机部分是后8位,那么子网掩码就是:11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0
知道 子网掩码 我们就能判断,任意两个ip地址是否处在同一个子网络。方式是将两个ip地址与子网掩码分别进行'AND运算'(两个数位都为1,运算结果为1,否则为0)然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是
# 总结:ip协议的主要作用主要是有两个,一个是为每一台计算机分配ip地址,另一个是确定那些地址在同一个子网络

ip数据包

ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
head:长度为20-60字节
data:最长为65515字节
以太网数据包的'数据'部分,最长只有1500字节,因此,如果ip数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了

ARP协议

arp协议的由来:计算机通信基本靠吼,既广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议的时候,我们了解到,通信时基于mac 的广播方式实现,计算机在发包时,获取自身的mac时容易的,如何获取目标主机的mac,就需要通过arp协议
#  arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
#协议工作方式:每台主机ip都是已知的
工作方式:
# 1.首先通过ip地址和子网掩码区分出自己所处的子网
# 2.如果处于同一网络,通过arp获取网关的mac地址
# 3.这个包会以广播的方式在发送端所处的子网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac地址。
​
# 1.通信的第一步先拿到目标主机的ip地址
# 2.判断出目标主机与自己是否在一个子网里,如果在一个子网里,数据包的走向:   
# 源主机---》本地交换机---》目标主机
# 如果不在一个子网里,数据包的走向:
# 源主机---》本地交换机---》本地路由器---》公网---》目标路由器---》目标交换机---》目标主机

传输层

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启QQ,暴风影音,等多个应用程序。
我们通过ip和mac找到了一台特定的主机,如何标识这台主机上都要应用程序,答案就是端口,端口既应用程序与网卡关联的编号
#   传输层的功能:建立端口到端口的通信
端口范围0-65535,0-1023为系统占用端口

TCP协议

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割
#  'tcp'三次握手和四次挥手
SYN = 请求连接
ACK = 确认请求
SEQ = 序列号(暗号)
Listen = 等待请求
eatablished = 已建立连接
FIN_WAIT = 准备断开
Close_wait = 准备关闭
Last_ACK = 最后确认关闭
Time_wait = 关闭通道
#seq解决了顺序问题,还解决了累计确认问题
ack = 3 也代表了3之前的数据也都收到了
# win(窗口大小)
窗口大小会随着服务端传递的大小值进行调整,也会限制客户端发送数据的数量
# 网络拥塞
服务端会根据网络情况,调整窗口大小
# 通信之前需要先建立双向链接 
# 每发一个数据包都需要对方恢复ack确认信息之后,才会把本地的数据清除,否则会重发几次
​
ps:基于1和2,tcp协议的程序需要实现启动服务端

udp 协议

# 不可靠传输, 报头 部分一共只有8个字节,总长度不超过65535字节,正好放进一个ip数据包
#传输不需要确认,和tcp相反,不管数据如何,
每发一个包,不需要对方恢复ack确认信息,会直接把本地数据清除
​
ps:udp协议传输数据效率更快,但是tcp协议传输数据更可靠

应用层

应用层由来:用户使用的都是应用程序,均工作应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
#  应用层功能:规定应用程序的数据格式
例:TCP协议可以为各种各样的程序传递数据,比如Email,WWWW,FTP等等。那么,必须有不同协议规定电子邮件,网页,ftp数据的格式,这些应用程序协议就构成了应用层

socket(套接字)

#套接字   socket  将传输层,网络层,数据链路层,物理层封装端口,只专心研发应用程序
我们知道,两个进程如果需要进行通讯,最基本的一个前提,以为的标识一个进程,再本地进程通讯中,我们可以使用PDI来唯一标识一个进程,但PID旨在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程
能够唯一标识网络中的进程后,他们就可以利用socket进行通信了
# 什么是socket ?
我们常把socket翻译为套接字,socket实在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应层调用已实现进程再网络中通信
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种  打开-读/写-关闭  模式的实现,服务器的客户端各自维护一个 文件  在建立连接打开后,可以向自己文件写入内容共对方读取,或者读取对方内容,通讯结束时关闭文件

子网划分

子网划分概念

子网划分时通过借用ip地址的若干位主机位来充当子网地址的,从而将原来的网络分为若干个彼此隔离的子网实现的
#  注意:arp协议通过ip地址获取目标主机的mac地址这一过程使用的是广播的方式,这个广播地址就是通过子网地址与子网掩码计算而来的,只有计算出的这一子网内的主机才能收到这个arp广播包
#  子网划分与vlan都可以做到隔离广播域,只是子网划分是三层隔离,vlan是二层隔离

子网划分步骤

1.确定要划分的子网数以及每个子网的主机数
2.求出子网数目对用的二进制的位数N及主机数目对应的二进制数的位数M
3.对该ip地址的元子网掩码,将其主机地址部分的前N位置1(其余位置0)或后M位置0(其余位置1)既得出该IP地址划分子网后的子网掩码

划分子网注意事项

1.在子网划分是不仅需要考虑目前需要,还应该了解将来需要多少子网和主机,子网掩码使用较多的主机位,可以得到更多子网,节约了ip地址资源,若将来需要更多的子网时,不用再重新分配ip地址,但每个子网的主机数量有限;反之,子网掩码使用较少的主机位,每个子网的主机数允许有更大的增长,但可用子网数有限。
2.一般来说,一个网络中的节点数太多,网络会因为广播通信而饱和,所以网络中的主机数量的增长时有限的,也就是说,再条件允许的情况下,应将更多的主机位用于子网位。

为什么要子网划分

internet组织机构定义了物种IP地址,用于主机的有A,B,C三类地址。其中A类网络有126个,每个A类网络可能有16,777,214台主机,他们处于同一广播域。而在同一广播域中有这么多结点时不可能的,网络会因为广播通信而饱和,结果造成16,777,214个地址大部分没有分配出去,形成了浪费。而另一方面,随着互联网应用的不断扩大,IP地址资源越来越少。为了实现更小的广播域帮更好的利用主机地址中的每一位,可以把基于类的IP网络进一步分为更小的网络,每个子网有路由器界定冰分配一个薪的子网网络地址,子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,是的从外部看网络没有变化,这就是子网掩码
​
#  简单的说:一个公司不可能使用254个公网地址,A公司想用6个地址,B公司也想用6个地址,如果把这两个公司的地址都放在一个大网段里面,这两个公司的地址就能够直接互通

子网划分优点

1.减少网络流量
2.提高网络性能
3.简化管理
4.易于扩大地理范围

子网划分

子网划分完毕后,链接再同一台交换机上的不同子网的计算机,站在三层的角度属于不同的局域网,但是他们都是连接再同一台交互机上,站在二层角度,就是同一个局域网,说白了一个数据包的广播还是会广播到该交互机所有的端口,所以,子网划分通常与vlan配合使用
#  二层隔离和三层隔离
两台计算机加入不同的交换机,称之为二层隔离
子网地址不同,称之为三层隔离
结论:
1.二层隔离与三层隔离需要保持一致
2.二层联通,三层可以隔离

网络通信实现

实现网络通信

1.本机的ip地址
2.子网掩码
3.网关的IP地址
4.DNS的IP地址
获取这四要素的两种方式:
1.静态获取:手动配置
2.动态获取:通过'dhcp'获取

从0如何获取:

   以太网头      ip头      udp头        dhcp数据包
​
1.最前面的以太网头,设置发出方(本机)的mac地址和接收方(DHCP服务器)的mac地址。前者就是本机网卡的mac地址,后者不知道,填入一个FF-FF-FF-FF-FF-FF.#只有本地mac地址,让dhcp服务器填入mac地址
2.后面的 IP标头,需要有源IP地址和目标IP地址,目前暂时都没有。发出方IP地址设为:0.0.0.0,接收方IP地址设为:255.255.255.255
3.最后的 UDP标头 设置发出方的端口和接收方的端口,DHCP协议规定好的,发出方是68端口,接收方是67端口
4.以太网靠吼的方式发送,DHCP看接收方的IP地址是自己的,然后读出这个包的数据内容,分配IP地址,回复一个'DHCP响应'数据包
# DHCP数据包包含:
# 以太网标头的双方mac地址,IP标头的双方IP地址,UDP标头的端口67端口(发出方)和68端口(接收方),还有分配给请求端的IP地址和本网络的具体参数包含再Data部分。
于是:新加入的计算机收到这个响应包,就有了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数

DNS域名解析

#  什么是DNS:
domain name servers域名解析服务,负责把域名解析成IP地址
# DNS的作用:
正常访问网页必须提供IP地址才能打开,域名和IP地址捆绑,直接输入域名就可以直接访问,利于记忆。
#  DNS常见问题:
网页无法打开,QQ,MSN可以用:
即时聊天软件用的是UDP传输协议,无需DNS服务器地址,也可以登录
其他网页没有IP地址是无法正常开启的

DNS的两种查询方式

1.递归:
主机向本地域名服务器的查询一般都是采用递归查询。
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器发出查询请求报文,替主机查询,而不是让主机自己进行下一步查询。
2.迭代:
本地域名服务器向根域名服务器的查询叫迭代查询。
# 迭代查询的特点:
根域名服务器收到本地域名服务器发出的迭代查询请求时,要么给出IP地址,要么告诉服务器,下一步该往哪一个域名服务器进行查询。然后本地主机继续查询,以此类推。
为了提高DNS查询效率,在域名服务器中广泛使用了高速缓存,之前查询的内容会进行缓存,域名服务器为没想内容设置计时器冰处理超过合理时间的项(例如每个项目两天)
维护本地域名服务器的主机应当定期检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。
​
# udp协议查询,udp数据最长自己为512字节,所以只能有13台

DNS解析流程

1.首先客户端位置时一台电脑或手机,在打开浏览器以后,比如输入zdns.cn的域名,它首先时由浏览器发起一个DNS解析请求,如果本地缓存服务器找不到结果,则首先会向跟服务器查询,跟服务器里面记录的都是各个顶级域所在的服务器位置,当向根请求zdns。cn的时候,根服务器就会返回。cn服务器的位置信息
2.递归服务器拿到.cn的权威服务器地址以后,就会询问.cn的权威服务器,知不知道zdns.cn的位置。这个时候cn权威继续i想zdns.cn服务器查找并返回zdns.cn服务器的地址
3.继续向zdns.cn的权威服务器去查询这个地址,由zdns.cn的服务器给出了地址:202.173.11.10。 
4.最终才能进行http链接,顺利上网
# 补充:一旦递归服务器拿到解析记录后,就会进行缓存,下一次客户端请求的时候,直接把zdns.cn的记录返回给客户端了,不需要查了

DNS缓存

DNS缓存只DNS返回了正确的IP之后,系统就会将这个记过临时存起来,谁当失效时间,在有效时间内,可以直接运行打开,不需要询问DNS服务器,变相加速了网址的解析。
ps:如果超过时间,系统会询问DNS服务器获得新结果,如果你修改了DNS服务器,并不希望计算机继续使用之前的DNS缓存,需要本地清除缓存

DNS缓存分类

1.浏览器DNS缓存(内存中):浏览器会按照一定频率缓存DNS记录
2.本地操作系统DNS缓存(内存中):如果浏览器缓存中找不到需要的DNS记录,那就去操作系统找
3.#本地HOSTS文件(硬盘中):windows系统中位于C:\Windows\System32\drivers\etc
4.路由器指定的DNS(远程):路由器自动获取DNS地址,也可以手动修改-登录后台设置DNS服务器地址
5.ISP的DNS服务器(远程):ISP(internet service provider互联网服务提供商、联通电信移动),ISP由专门的DNS服务器应对DNS查询请求
6.根服务器(远程,跨国):ISP的DNS服务器还找不到的话,它就会向根服务器发出查询请求,调用系统缓存需要跨进程,小号打,因此为了解析速度的方便,就有了一系列缓存来加快IP查找速度
# PS:路由器DNS被篡改会造成域名劫持,你访问的放置都会被定位到同一个位置,但是IP可以直接访问
​
# DNS查找顺序:
 #  浏览器DNS缓存-》本地系统DNS缓存-》本地计算机HOSTS文件-》本地DNS缓存-》递归or迭代搜索

清除DNS缓存

1.打开CMD执行命令: ipconfig/all
2.查看本地DNS缓存命令:  ipconfig/flushdns
3.chrome://net-internals/#dns 点击clearhost cache  谷歌浏览器
4.在地址栏中 about:config 并回车,可能会出现一个警告信息,直接点击按钮进入,会出现firefox的所有配置信息,通过搜索dns 进行过滤,
可以看到一项名为 network.dnsCacheExpirationGracePeriod 项,它对应的值就是DNS缓存的时间,双击此项,会出现修改的提示框,填入 0 (不缓存DNS)即可。#火狐浏览器

网络通信流程

1.本机获取地址
2.打开浏览器访问
3.DNS协议(基于udp协议)
4.HTTP部分的内容
5.TCP协议
6.IP协议
7.以太网协议
8.服务端响应
​
​
1.本机获取:
本地的IP地址:192.168.1.100
子网掩码:255.255.255.0
网关的IP地址:192.168.1.1
DNS的IP地址:8.8.8.8
2.打开浏览器,访问百度,在网址栏输入域名
3.DNS协议(基于udp协议)
4.HTTP部分的内容,类似于下面:
GET / HTTP/1.1
Host: http://www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …
# 我们假定这个部分的长度为4960字节,他被嵌在TCP数据包中
5.TCP协议:
TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口时一个随机生成的1024-65535之间的整数,假定51775.
TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。
6.IP协议:
然后tcp数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是一直到的,发送方时192.168.1.100(本机)接收方是 172.194.72.105(Google)
IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。
7.最后IP数据包前途以太网数据包。以太网数据包需要设置双方的mac地址
以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节)所以四个包的IP数据包的长度分别为1500.1500.1500.560
8.服务端响应:
经过多个网关的转发,Google服务器收到了四个以太网数据包
根据'IP标头'的序号,Google去除完整的'TCP数据包',然后读出里面的'HTTP请求',做出'HTTP响应',再用'TCP协议'发回来
本机收到HTTP行营以后,就可以将网页显示出来,完成一次网络通信

子网划分与VLAN

子网划分完毕后,链接再同一台交换机上的不同子网的计算机,站在三层的角度属于不同的局域网,但是他们都是连接再同一台交互机上,站在二层角度,就是同一个局域网,说白了一个数据包的广播还是会g该交互机所有的端口,所以,子网划分通常与vlan配合使用
#  二层隔离和三层隔离
两台计算机加入不同的交换机,称之为二层隔离
子网地址不同,称之为三层隔离
结论:
1.二层隔离与三层隔离需要保持一致
2.二层联通,三层可以隔离,这几台机器可能在连接同一个交换机,但是不在同一个局域网

VLAN

VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。
​
简单来说,同一个VLAN中的用户间通信就和在一个局域网内一样,同一个VLAN中的广播只有VLAN中的 成员才能听到,而不会传输到其他的VLAN中去,从而控制不必要的广播风暴的产生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值