Linux网络通信协议


什么是互联网/什么是网络?

互联网+物理链接设备+互联网通信协议

为什么要有互联网?

方便数据的传输,互联网又称为信息高速公路

CS架构与 BS架构

cs架构是客户端架构 client客户端 ------server服务端

bs架构是浏览器架构 browser———— server

client客户端 server服务端

客户端软件send 服务端软件recv

操作系统 操作系统

计算机硬件 物理介质 计算机硬件

什么是网络通信?

网络通信存在意义就是跨地域数据传输

如何找到目标服务器?

通过ip地址加mac地址标识全世界内独一无二的一台计算机

也可以说ip地址就可以找到全世界那一台独立的计算机

ip地址通过ARP协议,可以自动解析成mac地址

互联网通信协议

osi七层协议

应用层》会话层》表示层》传输层+网络层+数据链路层+物理层

但是我们称为5层

五层协议:

应用层+传输层+网络层+数据链路层+物理层

应用层

可以自定义协议,= 头部+数据

传输层 tcp 和 udp 协议》基于端口(part)

端口范围0----65535, 其中0-1023 端口以被系统占用

ip+端口=》标识全世界范围内独一无二的一个基于网络通信的应用程序

端口:每个端口都由操作系统分配端口编号,一个端口对应一个应用程序,并且端口不能冲突

 

tcp协议规定:tcp的头+数据

tcp 可靠协议 因为它是每发一个数据包过去,都需要对方回复ack确认信息后,才会把本地数据删除,否则会重复发送几次

三次握手和四次挥手 建立双向链接

三次握手:

建立虚拟通道

客户端 服务端

发送请求 收到请求 包含服务端的请求(我的发建立虚拟通道)

客服收到请求

通道建立成功

 

四次挥手:

断开虚拟通道

客户端 服务端

(1.1) 客户端首先进入FIN_WAIT_1 (状态) 主动发起断开通道请求

(1.2) 服务端进入close_wait(状态) ? 收到断开连接请求

(2.1)服务端进入LAST_ACK (状态) ) ? 代表下一个通道马上断开,还没断开

(1.3)客户端进入FIN_WAIT_2(状态) 一个通道已经断开

(2.2)客户端收到后进入TIME_WAIT(状态) 所有通道已经断开 向服务端发送ack=1 (2.3)服务端收到ack=1后,不再有反应

1.1---1.2----1.3 2.1---2.2-----2.3 请注意时间段

 

udp协议:不可靠协议 1, 无连接

2,每发一个数据包不需要对方回复ack确认信息,会直接把本地数据清除

不需要建立双向通道

ps:基于1和2 udp协议协议的程序无需事先启动服务端

ps:udp协议传输数据的效率比tcp更快,但是tcp协议的传输数据更可靠

tcp协议为何建立链接需要三次握手,而断开连接需要4次挥手?

为何tcp协议更可靠?

交换机:二层设备

划分VLAN

一个交换机可以划分VLAN

可以不通过路由器隔离不同的广播域

Access port 口 特点 加VLAN标记 发出去的包没有VLAN标记 连接计算机

Trunk port 口 特点 有vlan标记 发出去的包有VLAN标记 连接交换机

 

 

socket套接字

把应用层以下的四层协议封装好了

所有基于网络的应用程序,都是socket应用程序

应用程序产生的数据包要往外传输直接传给socket就可以了,socket会完成后续的封装

dns 域名解析

WWW.BAIDU.COM.

WWW.JD.COM.

. 代表根域名 全球13台根服务器

com 代表顶级域名 com就是商业组织 申请难

JD 代表二级域名

www 代表主机名

访问一个网站 需要它的ip地址 不好记,为了好记,我们就用域名

根服务器 只存放顶级域名的ip地址 com解析记录

com顶级域服务器 只存放二级域名

二级域名 存放www

分级管理,分级查询,

dns的查询:

递归:a问b ,b说我不知道,你别急,我知道c知道,b问c,c说我不知道,但是我知道d知道,问清除后,按层返回

迭代:a问b b说我不知道,但是我知道c知道,你自己去问吧,我去问c,c说我不知道,但是我知道d知道,你自己去问吧

dns查询一个域名

首先递归问所有人没问到,只能迭代问

浏览器在访问服务器会通过域名 它的顺序为:

浏览器dns缓存,本地系统dns缓存,本地计算机hosts文件,isp缓存,递归,迭代

hosts文件可以充当本地dns用

linux系统:/etc/hosts

windows: C:\windows\systme32\drive\etc\hosts

dhcp服务端端口67

dns服务端端口

网络层:用头和数据来完成封装,必须通过ip协议

ip协议,当源IP要访问目标ip 方法就是直接去问,会有两种情况:

在同一个子网内 我们子网内有一个网关,网关内有一个mac地址表,如果有直接拿到目标的mac地址

不在一个子网内 我们会拿到网关的mac地址 我们会发一个获取mac地址的包,这个包是ARP的协议的包,当网关拿到这个包就会明白,我曹!问我要我的mac地址,快拿走

自己的mac有了,网关的mac也有了

这时可以发真正的数据包了,网关现在看数据包的ip地址了,源ip地址是自己,还有一个公网的ip地址

网关知道了,我得让一个路由转发,送给对方的网关了,

对方网关看到,这是我公网ip,发起广播,找到那个私网ip地址,就找了mac地址,再把数据包送给网关。

现在我们找到了目标的ip地址和mac地址还不够,我们是想访问运行在他操作系统上的一款软件,

就得用到传输层的端口

ARP协议:

规定了ip地址和子网划分

ip地址的两方面用途

1,arp协议会把ip地址解析成mac地址,

2,标识子网地址:

1,通信的第一步先拿到目标主机的ip地址

2,判断出目标主机与自己是否在一个子网里

如果在一个子网里,数据包的走向:

源主机》》》本地交换机》》》》目标主机

如果不在一个子网里,数据包的走向

源主机》》本地交换机》》》本地路由器》》》公网》》》目标路由器》目标交换机》》目标主机

arp协议 推算原理:

根据源ip和源子网掩码推算出源地址

根据目标ip和目标子网掩码推算出目标地址

如果一样,则在一个子网里

如果不一样,则在公网里

172.16.10.11 用八个二进制数表示 01101011,00101110,01010011 ,001101011

255.255.255.0 用八个二进制数表示 111111111,111111111,111111111,00000000

推算为1+1 为1 1+0=0 推算出来,就是子网地址

前24个数为网络标识位 ,后八个数字表示 主机位

 

送arp协议的广播包拿到mac地址,格式如下

自己的mac地址,FF,FF,FF,FF,FF,FF 源主机的ip 目标主机的ip 数据部分

跟 路由器要mac地址

发起真正的通信

自己的mac地址 路由器的mac地址 源主机的ip 目标主机的ip 源端口,目标端口 数据

本地回环地址

在一个子网中测试代码是否可以正常运行,规避网络问题

二层隔离和三层隔离:

两台计算机接入不同的交换机,称之为二层隔离

子网地址不同,称之为三层隔离

结论:二层隔离与三层隔离要保持一直

二层联通,三层可以隔离,即两台计算机接入同一个交换机

 

数据链路层:必须要对它进行分段,每一组都有它的意义,定义电信号的分组方式

协议:规定数据的组织格式

格式: 头部+数据部分

 

1,以太网协议:

规定一个组电信号称为数据帧,每一组都分为报头head和数据data两部分,是对数据具有描述性的

head头固定位18个字节,前六个位发送者地址,后六位为接收者地址,剩下六位为数据类型

data:最短46字节,最多1500字节

head 像是一个快递盒子,而data是数据

以太网规定:

mac地址

但凡接入网络的计算机必须有 块网卡,每块网卡在出场会刻入mac地址,长度为48为2进制,通常有12位16进制数表示(全世 界独一无二mac地址)

计算机通信靠广播, 通信基本靠吼,

 

 

物理层:用来发送电信号01010101高低电频

 

整体流程:

计算机开机

1,DHCP动态获取计算机 本机ip地址 子网掩码 网关地址 dns的ip地址

2,打开浏览器,想要访问Google ,在地址栏输入:www.Google.com

3,dns协议 基于(udp协议)

4,网线

 

相关