欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

网络初步认识(TCP/IP五层模型及网络字节序)

程序员文章站 2022-07-02 23:01:34
一、主要概念。二、...

一、网络发展

  1. 从开始的单机——>小型网络——>大型网络。
  2. 小型网络:使用路由器/交换机将多个单机链接起来的网络。
  3. 大型网络:小型网络互相连接数据交换而形成大型网络。
  4. 网络划分:①按覆盖范围:局域网,城域网,广域网。②互联网和因特网。③组网方式:以太网,令牌环网。

二、网络协议

(一)IP地址:
  1. IP地址:在网络中能唯一标识一台主机,实现点对点的通信。
  2. IP地址:分为IPV6 和 IPV4。
  3. IPV4: uint32_t 无符号的4个字节的整数。
  4. 网络通信中每条数据都具备:
    ①源IP地址/目标IP地址:表示从哪个来到哪个去。
    ②源IP地址:能够让对端主机知道是谁发送的。
    ③目的IP地址:能够让网络中的路由器根据目的IP地址选择不同的路劲到达对端的地址。
  5. 进程处理端口:IP地址使网络中实现主机与主机之间的通信,但主机中很多进程通信中必须标识一条数据应该由哪个进程处理端口发送。
    ① 一个进程可以使用多个端口,但一个端口一次只能被一个进程使用。
    ②数据必备:源端口与目的端口。进程pid 随着程序的重启会发生改变,而端口不会。
  6. 网络通信:通过IP地址和端口可以实现不同主机间的进程间通信。
(二)协议分层:
  1. 协议分层:对通信协议在不同的环境进行封装,不同层次使用不同协议,提供不同服务;将通信协议划分出来,通信实现更加简单,更容易规范。
  2. 网络中通信环境中的协议分层:(主要说明TCP/IP五层模型)
    (1)OSI七层参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
    (2)TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物理层。
    TCP/IP是一组协议簇,包含多种协议,TCP/IP只是里面比较典型的协议。
    应用层:负责应用程序之间的沟通。例如:QQ与QQ之间的数据会话,协商QQ的数据格式。典型协议:HTTP/HTTPS、DNS、FTP协议。
    传输层:负责不同主机上进程间的数据传输:因为传输层上主要的信息就是端口(端口信息)。典型协议:TCP/UDP协议。
    网络层:负责地址管理与路由选择,为网络中的数据选择合适的路径。(IP信息) 典型协议:IP协议。典型设备:路由器。
    数据链路层:负责相邻设备间的数据帧识别与传输。(网卡设备的MAC地址信息)。 典型协议:Ethernet协议
    典型设备:交换机。
    物理层:负责物理光电信号的传输。典型协议:以太网协议。典型设备:集电器。
    (3)数据传输中的数据封装和分用: 层层封装层层分用
    ①不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
    ②应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
    ③首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
    ④数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理

三、网络字节序

  1. 字节序:CPU在内核中对数据进行存取的顺序—取决于CPU架构。CPU架构:x86架构CPU—小端:高位字节序存高地址,低位字节序存低地址。mips架构—大端。

  2. 主机字节序:当前主机的字节序。

  3. 网络字节序:网络通信是各个主机之间的通信,但主机上的主机字节序会对通信造成极大的影响。因此,网络通信必须统一使用网络字节序,也就是大端字节序。才能避免此类问题。

  4. 网络字节序是大端字节序。若主机字节序是小端,在网络通信中就应该转换为大端字节序。

  5. 并不是所有的数据都需要进行转换为网络字节序,需要转换的关键在于内存中一次存取的数据大小是否超过一个字节。(short,int,double,long,float等)

  6. 小端与大端
    ①小端:高位字节序存在高地址上,低位字节序存在低地址上。
    ②大端:高位字节序存在低地址上,低位字节序存在高地址上。
    ③大小端的代码识别:

    #include<iostream>
    using namespace std;
    int main()
    {
    	union stu
    	{
    		int i = 1;
    		char a;
    	}st;
    
    	if (st.a == 1)
    		cout << "小端存储" << endl;
    	else
    		cout << "大端存储" << endl;
    	return 0;
    }
    

本文地址:https://blog.csdn.net/weixin_42357849/article/details/107327179