网络编程基础通信

Posted lmtlmt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程基础通信相关的知识,希望对你有一定的参考价值。

物理层
高低电频 0101
数据链路层
把数据封装 以太网协议
数据头(18字节) |数据
源mac
目标mac
数据类型
网卡 :mac 地址 电脑唯一的标识,
网络层
ip协议
确定电脑所在的网络位置
ip :172.16.10.1:10101100.00010000.00001010.000000001
子网掩码(A,B,C三类) 常用的是C类:255255.255.255.0:11111111.11111111.11111111.00000000
通过AND运算 就可以判断在不在同一个网段了

传输层
找到计算机软件的位置
tcp 协议 ,udp 协议 和端口协议
tcp:安全可靠,面向连接的流式协议 ,效率低 会发生粘包现象
udp :不安全,不需要连接通道,效率高
端口协议:
端口即应用程序与网卡关联的编号。
0-65535 六万多端口 1-1024 是系统的 1024 --8000 是扣扣 微信等软件的 8000以后是自己定义的

应用层
各个软件的数据协议

数据大小:
以太网数据:
head包含:(固定18个字节)

发送者/源地址,6个字节
接收者/目标地址,6个字节
数据类型,6个字节
data包含:(最短46字节,最长1500字节)

数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送


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

通信原理:
计算机 是通过广播的形式 传播的

从一台计算软件到另一台 计算机软件的 信息交互
从本机电脑 浏览器或者软件发送信息 访问对方ip
本地计算 会先判断是不是在同一网段
在 :
第一次:源mac 计算机通过单播的形式 ---->传给交换机(有主动学习功能)----广播--->各个交换机-----广播--->各个计算机----与这个ip 符合的电脑----单播回应---->交换机
--通过ip + RAP 获得目标mac 本计算记录下来到对照表中 -单播-->源mac计算机
第二次:不需要广播的形式了,只需要单播形式就可以了

不在: 源mac本地计算 ---单播--->交换机---->路由器HPCP协议把mac 地址改路由mac ip改为网关ip-----路由协议找出最近的路径-->
目标路由----端口映射技术---->服务器
路由器:
利用NAT技术:将你计算机的ip置换成 路由器A网段的ip 192.168.1.0
路由协议: 利用算法计算出你达到目标路由的最短路径

ARP协议

arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到

通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议

arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,
通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头|ip头|tcp头|数据

udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65535
字节,正好放进一个IP数据包。

以太网头|ip头|udp头|数据

想实现网络通信,每台主机需具备四要素
本机的IP地址
子网掩码
网关的IP地址
DNS的IP地址

二版:
‘‘‘
五层协议:
物理层:
物理连接介质. 光纤,双绞线等等.
物理层发送的数据: 高低电平. 0101010101111

物理层只是发送单纯的01010101
但是数据应该进行分组,源地址,目标地址. 这些物理层做不了.

数据链路层: 主要就是对数据进行分组,封包:源地址,目标地址.
早起每个公司都有不同的标准,后来统一标准:以太网协议.
规定数据份分为两部分:
数据头 | 数据
数据头规定 固定字节:18个字节.
数据头部分:
源地址: 6个字节
目标地址: 6个字节
数据类型: 6个字节.
将数据分为组的形式: 一组电信号:数据报,也叫一帧.
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

网卡: mac地址. 就是计算机的唯一标识,计算机出厂就会有网卡,网卡上就有一个mac地址
12位 16进制: 40-8D-5C-93-F1-DE 前六位:厂商编号,后六位:流水线号.

计算机是如何通信的?
计算机通信方式:广播,吼.
村东头老李马上来村委会: 全村人全部都能接收到消息,分析消息,不是找自己的将消息丢弃掉.
理论上: 有了mac地址,加上广播的方式,全世界所有的计算机都可以通信了.
实际不行,广播风暴,效率低,工作量太大.

接下来规定:mac + 广播的形式只能在 局域网 中实行.

如何确定局域网位置?
网络层: 确定局域网的位置.
ip协议. 寻找对方局域网的位置.

ip + mac + 广播 就能确定世界上任何一个计算机的位置.

传输层:
端口协议. 每一个软件都有固定的端口,
0 ~ 65535 1~1024 系统占用.
端口:确定软件的位置.

端口 + ip + mac + 广播 就能确定世界上任何一个计算机的软件的位置.

应用层: 每个软件对于数据有不同的自定制协议.
FTP,WWW等等.


简单流程:
给强哥发一个 今晚吃鸡.
应用层: qq将数据封装成了 一个字典: {‘content‘: ‘今晚吃鸡‘} 软件自己做的.

操作系统:
传输层: 8000 | {‘content‘: ‘今晚吃鸡‘} # 确定软件在计算机的位置
网络层: ip:192.168.1.12 | 8000 | {‘content‘: ‘今晚吃鸡‘} 确定计算机在哪个局域网
数据链路层: 源mac地址,目标mac地址 数据类型 | ip:192.168.1.12 | 8000 | {‘content‘: ‘今晚吃鸡‘} 计算机在局域网的哪个位置
物理层: 网线 将数据已电信号的形式发出去.

一系列物理连接介质:
达到对方物理层. ---> 数据链路层


# 具体细节:


五层协议:
物理层:
物理连接介质. 光纤,双绞线等等.
物理层发送的数据: 高低电平. 0101010101111

物理层只是发送单纯的01010101
但是数据应该进行分组,源地址,目标地址. 这些物理层做不了.

数据链路层: 主要就是对数据进行分组,封包:源地址,目标地址.
早起每个公司都有不同的标准,后来统一标准:以太网协议.
规定数据份分为两部分:
数据头 | 数据
数据头规定 固定字节:18个字节.
数据头部分:
源地址: 6个字节
目标地址: 6个字节
数据类型: 6个字节.
将数据分为组的形式: 一组电信号:数据报,也叫一帧.
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

网卡: mac地址. 就是计算机的唯一标识,计算机出厂就会有网卡,网卡上就有一个mac地址
12位 16进制: 40-8D-5C-93-F1-DE 前六位:厂商编号,后六位:流水线号.

计算机是如何通信的?
计算机通信方式:广播,吼.
村东头老李马上来村委会: 全村人全部都能接收到消息,分析消息,不是找自己的将消息丢弃掉.
理论上: 有了mac地址,加上广播的方式,全世界所有的计算机都可以通信了.
实际不行,广播风暴,效率低,工作量太大.

接下来规定:mac + 广播的形式只能在 局域网 中实行.
细节补充:
原则上:同一个局域网就是通过 源mac地址 + 目标mac地址 + 数据 + 广播 可以将数据传输.

这里 有一个交换机mac地址自主学习功能.
交换机有一个mac 与 网口的对照表.
1 40-8D-5C-93-F1-DE
2 40-8D-5C-93-F2-DE
3 41-8D-5C-93-F1-DE
.....

24 40-8D-5F-93-F1-DE

同一个局域网之内发送一个数据:
源mac地址: 40-8D-5C-93-F1-DE 目标mac地址 40-8D-5F-93-F1-DE 数据

如果交换机第一次连接这些电脑:
1 40-8D-5C-93-F1-DE
2 ?
3 ?
.....

24 40-8D-5F-93-F1-DE

第一次 我的网口1连接的计算机发送一个数据,发送给目标mac,第一次的时候是不知道目标mac地址是多少的.
IP地址 + ARP协议 计算出对方的mac地址.
第一次发送给IP地址为 192.168.10.24
通过广播:在同一个局域网内广播一个数据:
(源mac地址 40-8D-5C-93-F1-DE ,对方mac FF-FF-FF-FF-FF-FF)(源ip :192.168.10.22 对方ip 192.168.10.24)
找到符合的ip:
回传一个数据:
(源mac地址 40-8D-5F-93-F1-DE ,对方mac 40-8D-5C-93-F1-DE)(源ip :192.168.10.24 对方ip 192.168.10.22)

同一个局域网之内:
第一次发送数据 需要广播的形式,获取对方的mac地址,将mac地址与网口写入交换机的对照表.
第二次发送数据(计算机与网口没更换):不同广播,而是直接从mac对照表寻找对方的地址.





如何确定局域网位置?
网络层: 确定局域网的位置.
ip协议. 寻找对方局域网的位置.
细节补充:怎么通过ip寻找对方的局域网的位置?
ipv4:
三点分十进制:
0~255.0~255.0~255.0~255
同一个局域网内所有计算机的IP地址绝对不同.
172.16.10.1
子网掩码: 255.255.255.0

IP + 子网掩码才能确定是否在同一个网段,同一个子网,同一个局域网.

172.16.10.1:10101100.00010000.00001010.00000001
255.255.255.0: 11111111.11111111.11111111.00000000
10101100.00010000.00001010.00000000
此IP的网段: 172.16.10.0
172.16.10.12 10101100.00010000.00001010.00000001
255.255.255.0: 11111111.11111111.11111111.00000000
此IP的网段: 172.16.10.0
如果子网掩码都是C类:255.255.255.0,那么 一个局域网可以分配多少个ip?
前提是C类子网掩码:一个网段:最多能有256个IP: 0 不能用, 255 不能用,254,: 253个IP/.

ip + mac + 广播 就能确定世界上任何一个计算机的位置.

端口 + IP + 子网掩码 + mac + 广播的形式就可以确定世界上任何一个计算机软件的位置.
精简一下: ip协议和ARP 协议可以获取我的mac地址,
端口和ip地址 就可以确定世界上任何一个计算机软件的位置.

总结:
通过计算机发送数据,我要先获取对方的ip和子网掩码:
去判断是不是同一个局域网
如果是同一个局域网: 通过IP ARP协议 获取mac 发送数据.
如果不是同一个局域网:网关(路由协议)一层一层的发送.

传输层:
端口协议. 每一个软件都有固定的端口,
0 ~ 65535 1~1024 系统占用.
端口:确定软件的位置.

端口 + ip + mac + 广播 就能确定世界上任何一个计算机的软件的位置.

应用层: 每个软件对于数据有不同的自定制协议.
FTP,WWW等等.



01 昨日内容回顾
操作系统: 连接计算机硬件和软件的软件
C/S B/S 架构
C/S:客户端 服务端
硬件CS架构: 打印机
软件CS架构:QQ 微信,优酷等等

B/S: 浏览器 服务端
谷歌浏览器.

网络通信原理:
是计算机的软件与另一台计算机的软件之间的通信.

五层协议:
应用层: 软件自定义协议,qq为例: {‘content‘:‘很美好的一天‘}
交给操作系统:
传输层:tcp,udp 协议:端口协议 -----> 8001|{‘content‘:‘很美好的一天‘}
网络层:ip协议: ip获取局域网位置:---> 192.167.12.99|001|{‘content‘:‘很美好的一天‘}
数据链层:以太网协议:源mac地址,目标地址mac,数据类型|192.167.12.99|001|{‘content‘:‘很美好的一天‘}
物理层:一对物理层连接介质,将数据转化为0010101高低电频发送

相关名词解释:
mac地址:计算机的唯一标识,每个计算机的mac地址都不同,12位16进制组成:
40-8D-5C-93-F1-DE
交换机: 连接计算机中转.
mac地址对照表:mac地址自主学习能力:
网口1: 40-8D-5C-93-F1-DE
网口2: 40-3D-5C-23-F1-DE
网口3: 40-34-5C-23-F8-DE
......
网口24: 40-34-5C-23-F8-12
ARP协议: 通过IP获取对方的mac地址
40-34-5C-23-F8-DE, FF-FF-FF-FF-FF-FF)(192.168.12.13 192.168.12.34)
单播:单独发送个对方
广播:群发.
(40-34-5C-23-F8-12 , 40-34-5C-23-F8-DE)(192.168.12.34 192.168.12.13)
ip: 网络地址,四点分十进制组成:
172.16.10.1
子网掩码: 四点分十进制组成:
C类: 255.255.255.0
B类: 255.255.0.0
A类: 255.0.0.0

子网掩码 与ip地址可以确定网关的地址,
172.16.10.1 ----> 10101100.00010000.00001010.00000001
255.255.255.0 ---> 11111111.11111111.11111111.00000000
172.16.10.0 ~ 172.16.10.255
有一个网关的地址:172.16.10.254
网关地址,网段,局域网:
路由器:
家用路由器
企业级路由器

内网: 路由就管理内网.
DHCP协议:自动分配IP地址,子网掩码,网关IP地址.
同一个局域网内的所有计算机的ip地址一定不同,不同局域网内的计算机ip可以相同.
内网计算机的ip都是路由器虚拟出来的.
外网: 连接外网,收发数据等等.
访问京东官网的流程:
在本地计算机软件中:输入京东域名
本地计算机浏览器会主动访问DNS流浪器,获取域名对应的ip地址
本地操作系统:判断访问的ip 地址与本地计算机的ip 地址是不是在同一个网段
在:
本地计算机--单播--->交换机--广播--->交换机 --广播-->每一台计算机..(对应ip的计算机)--
--单播-->交换机 --->目标计算机

不在:
本地计算机----单播-->交换机----单播-->路由器(网关) --静态路由-->通过路由协议算出最近的路段的对方路由器---->目标路由器---网段映射计术--
--->找到对应的端口的服务器
路由器做的事:
利用NAT技术:将你计算机的ip置换成 路由器A网段的ip 192.168.1.0
静态路由:将数据从路由A传出去传给路由D.
路由协议: 利用算法计算出你达到目标路由的最短路径.
数据发送到路由器D,通过端口映射技术将数据发送至京东服务器的对应软件的端口上.

问题:
1,外网不能通过广播的形式进行发送数据而是通过路由协议直接找到目标地址.
2,路由器与交换机的区别?
路由器确定一个网段,网关,子网,局域网,
192.168.1.0 一个网段,子网,局域网,
一个局域网如果是C类子网掩码:255.255.255.0

192.168.1.1 ~ 192.168.1.253
交换机:拓展网口的.
3,广播风暴?
4,IP地址 类似于京东这样的外网是可以直接访问的.

传输层 tcp udp 协议 端口协议
tcp :安全 可靠 效率低 面向连接的协议 流式协议
udp :不安全,效率高,不可靠,不需要连接


tcp 协议的三次握手 四次挥手:
三次握手 你问我答 互动的 是一个全双工
客户端发送一个请求syn =1 seq =x 给服务端 服务端 在同意客户端请求时 也对客户端发起一个请求ack =1+x syn=2 seq=y
客户端 同意服务端的请求 就完成三次握手
client-------(syn = 1 seq = x) ---->revser--------ack = 1+ x syn =1
seq =y ----->client ------ack = 2+y ---->revser

四次挥手 传输完数据不想连接了 就断开
客户端给服务端发送一个断开请求 fin =1 seq=x 服务端发送一个同意客户端的请求 ack = 1+x 此时有可能服务端还是给客户端传送数据 所以服务端 与客户端的通道还没有断开
然后服务端给客户端发送一个断开的请求 fin =2 seq =y 客户端 给服务端发送同意 ack = 2+y
client ----(fin = 1 seq =x )----->revser -----ack =1+x---->clinet
revser----fin = 2 seq=y ---->cil

‘‘‘




























































































































































































































































































































































































以上是关于网络编程基础通信的主要内容,如果未能解决你的问题,请参考以下文章

网络编程基础

Java socket编程API基础

javaAPI_网络编程基础_网络编程基础1

基础网络编程

linux高级编程基础系列:线程间通信

Java Socket编程基础