网络编程基础
网络编程-网络基础知识
CS架构和BS架构
1.硬件C/S架构(打印机)
2.软件C/S架构
互联网中处处是C/S架构
如网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)
腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)
C/S架构与socket的关系:
我们学习socket就是为了完成C/S架构的开发
网络通信
就是跨地域的数据传输,网络=物理链接介质+互联网通信协议
OSI七层协议
五层协议
应用层
传输层
网络层
数据链路层
物理层
协议:规定数据的组织格式
格式:头部+数据部分
封包裹的过程:数据外加头
拆包裹的过程:拆掉头获取数据
计算机1: 计算机2:
应用层 应用层
传输层 传输层
网络层 网络层
数据链路层 数据链路层
物理层 <===========交互机===========> 物理层
0101010101010
(源mac地址,目标mac地址)(源ip地址,目标ip地址)数据
下面我们层层刨析每层协议的原理
物理层
打个比方,淘宝卖家利用火车或船运,汽车等把货物送到你手里
物理层:如果两台计算机要连在一起玩的话,就必须接入internet,它只要就是发送高低电压信号
数据链路层
有的买家在北京,有的在上海,所以要将仓库的货物分类封装。在链路层中,需要将比特流组合成字节的组合。类似于把地址相同的货物放到同一个集装箱中,只要集装箱到达,货物也就自然到达。这种把比特流组合成字节的组合我们称之为数据帧。对数据进行处理封装成数据帧并传递和错误检测的层就是数据链路层。
ethernet规定:
规定1:一组数据称之为一个数据帧
规定2:数据帧分成两部分=》头+数据
头包含:源地址与目标地址,该地址是mac地址
数据包含:包含的是网络层发过来的整体的内容
mac地址:
head中包含的源和目标地址由来:ethernet规定接入的internet的设备里面必须有网卡,接受和发送端就是网卡的地址,规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址,这个就是mac地址
广播:
有了mac地址后,同一网络内的两台主机就可以通信了(计算机1通过arp协议获取计算机2的mac地址)
如果pc1广播的方式发送以太网包给pc4,其他的三台pc也会收到,其他的拆开后发现mac如果不是自己的就丢弃,是自己的就会响应
网络层
淘宝发货,从广州--上海(可以广州-长沙-上海;或者广州-福州-上海),网络层就是负责选择最佳路径,并保证数据始终沿着最佳路径传输。路由器的功能就是选合适的路径。
网络层:有了ethernet,mac地址和广播的发送方式,彼此就可以通信了,但是之间有效的局域网组成,但是如果所 有的通信都采用以太网的广播方式,世界上的每一台pc都会收到,所以要分层局域网划分广播域
每一个广播域但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
网关与外界通信走的是路由协议
规定1:一组数据称之为一个数据包
规定2:数据帧分成两部分=》头+数据
头包含:源地址与目标地址,该地址是IP地址
数据包含的:传输层发过来的整体的内容
ipv4地址:
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
ip地址分成两部分
网络部分 主机部分
识别子网 识别主机
子网掩码:
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
计算机1:
172.16.10.1: 10101100.00010000.00001010.000000001
255255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
计算机2:
172.16.10.2: 10101100.00010000.00001010.000000010
255.255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
ip数据包:
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
arp协议:
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
协议工作方式:每台主机ip都是已知的
两台计算机在同一个局域网内
计算机1:172.16.10.10/24 直接 计算机2:172.16.10.11/24
ARP:
自己的ip,对方的ip
1、计算二者网络地址,如果一样,拿到计算机2的mac地址就可以了
2、发送广播包
发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 数据
两台计算机不在同一个局域网内
计算机1:172.16.10.10/24 网关 计算机2:101.100.200.11/10
ARP:
自己的ip,对方的ip
1、计算机二者网络地址,如果不一样,应该拿到网关的mac地址
2、发送广播包
发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.1/24 数据
ip地址+mac地址
标识全世界范围内独一无二的一台计算机 或者 ip地址
标识全世界范围内独一无二的一台计算机
传输层
传输层:网络层ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上面可能开qq,视频等多个程序,我们可以通过ip和mac找到一台特定的主机,如何标识这台主机上面的应用程序,就是端口,端口就是应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
端口范围0-65535,0-1023是系统占用的端口
tcp协议:可靠的传输协议,tcp数据包没有长度的限制,但是为了传输的效率不宜过长,但是不会超过ip数据包的长度,以确保单个tcp数据包不必再分割
udp协议:不可靠的传输协议,是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
tcp的三次握手和四次挥手:
应用层
应用层:用户使用的程序都是属于应用层,是互联网开发出来的,大家都可以开发自己的程序,
数据多种多样,必须规定好数据的组织形式
应用层功能:规定应用程序的数据格式
socket
我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信
网络通信实现
想实现网络通信,每台主机需具备四要素
- 本机的IP地址
- 子网掩码
- 网关的IP地址
- DNS的IP地址
获取这四要素分两种方式
1.静态获取
即手动配置
2.动态获取
通过dhcp获取
以太网头 ip头 udp头 dhcp数据包
(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
(3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。
接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数
网络通信的基本流程
- 本机获取
- 本机的ip地址:192.168.1.100
- 子网掩码:255.255.255.0
- 网关的ip:192.168.1.1
- dns的ip地址:8.8.8.8
- 打开六零年起输入goole
- dns协议(基于udp协议)
- http部分的内容
GET / HTTP/1.1
Host: 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: … …
这部分被潜在tcp数据包里面,4960字节
-
tcp协议
它把数据传到传输层的时候,tcp数据包会设置端口,接收方的http默认端口是80,发送方的是51775,tcp数据包的标头部分是20字节,总的4980字节 -
ip协议
tcp数据包在镶嵌ip数据包,ip数据包需要设置双方的ip地址,这个是已知的,发送方是192.168.1.100,接收方是172.194.72.105,ip数据包标头长度是20字节,向前上tcp数据包,总长度5000字节 -
以太协议:
最后ip数据包在镶嵌上以太网的数据包,以太网数据包需要设置双方的mac地址,发送方为本机的网卡mac地址,接收方为网关192.168.1.1的mac地址(arp协议获得)
以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。
- 服务器端响应
经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。
根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。
本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信
本博客声明借鉴别的博主原博主