整个计算机网络是由不同的主机通过通信信道相连而成 ,通信信道是负责把分组报文从一个主机转发到另一个主机 报文也就是主机中的应用程序创建的字节序列
这里就需要了解一下网络分层

实际上主机上的应用程序才是真实的用户,那么在一个主机上的某个应用程序A他是怎么把数据发送到另一个主机的程序B的呢?
我们先来说一说什么是协议 协议可以说是一种约定 他规定分组报文的结构以及如何报文进行解析 通常是为了解决某一特定问题
现在的互联网是按照分层协议来架构的
见上图 最顶层属于应用层 下面是传输层再往下网络层 最底层是链路层 像光纤电缆等属于这一层
报文通常由应用层的程序创建 然后应用程序通过套接字API对传输层的UDP协议和TCP协议所提供的服务进行访问
然后下面先不谈传输层,先说说网络层的ip协议,ip协议提供了一个数据报服务 ,每组报文都通过网络独立分组和分发,同时ip报文里包含有目标主机的地址
这里会有一个问题 就是 ip协议只是负责把分组报文从当前主机通过底层的链路层发送到另一台主机,但是他不能定位对主主机上具体的应用程序B
并且IP协议也只是尽力而为 , 有可能发生数据丢失等等异常情况 , 这就需要用到传输层的两个协议 : TCP传输控制协议/UDP 用户数据报协议
这两个协议他们有个功能就是寻址 他们可以通过端口号来定位到对方主机上的具体应该用程序B
同时TCP 建立连接时需要经过3次握手 保证消息的可靠性 也就是修复了网络层信息丢失的问题
但UDP不能保证 他只是在网络IP层的基础上进行了扩展 能够找到对应方机的具体应用程序 依然存在消息丢失的问题
关于地址
一台主机上的应用程序A想要与另一台主机上的应用程序B进行通信 那么必须要知道对方的地址 地址由两个东西组成 那就是 IP 和端口
现在有两个版本ip地址表示法 一个叫IPv4 一个是IPv6
IPv4 是四组十进制数组成 中间用点隔开 这叫点分形式 如 12.10.22.145 每一位是四字节 也就是取值最大是255
IPv6 是由N组十六制数通过冒号分隔 如2000:fdb8:0000:0000:0001:00ab:853c:39a1
其中如果某位全是0可以省略
主机与地址是1对多的 同一个主机可以有多个ip地址 比如同时拥有ipv4 和ipv6
但同一个地址只能标识唯 一的一台主机
再来说说端口号 ip地址 就像是一栋大楼里的总机号 而端口号就像某个房间的分机号
这样通过ip+端口的方式就能定位到目标房间 也就是应用程序
其中有些特殊的ip地址如
回环地址 他能将发送给它的报文直接回发给发送者
ipv4对应的回环地址是127.0.0.1
ipv6对应的回环地址是0.0.0.0.0.0.0.1
主机名
在网络上通信使用ip地址非常不方便 所以有时会给ip对应一个主机名 大多数情况就是所谓的域名 但互联网协议只能处理二进制的网络地址 那当使用主机名来定位目标地址时就需要一个查询渠道 DNS 也就是Domain Name System 域名 系统 ,在与目标主机通信之前 通过请求dns去获取 主机名对应的ip 地址然后再与对方进行通信
网友评论