【Linux】网络篇一--网络基础



一、网络发展历史和分层

1、网络发展历史简介

  • 早期的ARPAnet使用网络控制协议(Network Control Protocol,NCP),不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能
  • 1973年由 Robert Kahn 和Vinton Cerf两人合作为ARPAnet开发了新的互联协议。
  • 1974年12月两人正式发表第一份TCP协议详细说明,但此协议在有数据包丢失时不能有效的纠正
  • TCP协议分成了两个不同的协议:
    • 用来检测网络传输中差错的传输控制协议TCP
    • 专门负责对不同网络进行互联的互联网协议IP

从此,TCP/IP协议诞生

1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议。TCP/IP协议成为Internet中的“世界语”


2、网络结构分层

  • 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。
  • 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
  • 网络体系结构即指网络的层次结构和每层所使用协议的集合
  • 两类非常重要的体系结构:OSI与TCP/IP

OSI开放系统互联模型

  • OSI模型相关的协议已经很少使用,但模型本身非常通用
  • OSI模型是一个理想化的模型尚未有完整的实现
  • OSI模型共有七层
    在这里插入图片描述

TCP/IP协议族的体系结构

  • TCP/IP协议是Internet事实上的工业标准
    一共有四层
    在这里插入图片描述

二、TCP/UDP特点

1、TCP/IP协议通信模型

在这里插入图片描述
在这里插入图片描述


2、TCP/IP协议下的数据包

在这里插入图片描述


3、数据的封装与传递过程

在这里插入图片描述


4、TCP/IP结构

在这里插入图片描述


5、TCP协议特点

TCP(即传输控制协议):是一种面向连接传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)

适用情况:

  • 适合于对传输质量要求较高,以及传输大量数据的通信。
  • 在需要可靠数据传输的场合,通常使用TCP协议
  • MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

6、UDP协议的特点

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

适用情况:

  • 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
  • 接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
    适合于广播/组播式通信中。
  • MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
  • 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输

三、TCP/IP网络编程预备知识

1、Socket

Socket 简介

  • 是一个编程接口
  • 是一种特殊的文件描述符(everything in Unix is a file)
  • 并不仅限于TCP/IP协议
  • 面向连接 (Transmission Control Protocol - TCP/IP)
  • 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)

Socket 类型

  • 流式套接字(SOCK_STREAM)
    提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
  • 数据报套接字(SOCK_DGRAM)
    提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
  • 原始套接字(SOCK_RAW)
    可以对较低层次协议如IP、ICMP直接访问

Socket 位置

在这里插入图片描述


2、IP地址

IP地址是Internet中主机的标识

  • Internet中的主机要与别的机器通信必须具有一个IP地址
  • IP地址为32位(IPv4)或者128位(IPv6
  • 每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由

表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个``32位的无符号整数`。


3、端口号

为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别

TCP端口号UDP端口号独立

端口号一般由IANA (Internet Assigned Numbers Authority) 管理

  • 众所周知端口1 ~ 10231 ~ 255之间为众所周知端口256~1023端口通常由UNIX系统占用)
  • 注册端口1024~49150
  • 动态或私有端口49151~65535

4、字节序

不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO):

  • 小端序(little-endian) - 序字节存储在地址
    将低字节存储在起始地址,称为“Little-Endian”字节序,Intel、AMD等采用的是这种方式;
  • 大端序(big-endian)- 序字节存储在地址
    将高字节存储在起始地址,称为“Big-Endian”字节序,由ARM、Motorola等所采用

网络中传输的数据必须按网络字节序,即大端字节序

在大部分PC机上,当应用进程将整数送入socket前,需要转化成网络字节序;当应用进程从socket取出整数后,要转化成小端字节序(原因?)

  • 网络字节序(NBO - Network Byte Order)
    使用统一的字节顺序,避免兼容性问题
  • 主机字节序(HBO - Host Byte Order)
    • 不同的机器HBO是不一样的,这与CPU的设计有关
    • Motorola 68K系列、ARM系列,HBO与NBO是一致的
    • Intel X86系列,HBO与NBO不一致

大端(Big-Endian):字节的高位在内存中放在存储单元的起始位置
在这里插入图片描述
小端(Little-Endian):与大端相反

字节序转换函数

把给定系统所采用的字节序称为主机字节序。为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序

主机字节序网络字节序:

u_long htonl (u_long hostlong);
u_short htons (u_short short);

网络字节序主机字节序:

u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);

IP地址的转换

  • inet_aton( )
    strptr所指的字符串转换成32位的网络字节序二进制值
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
  • inet_addr( )
    功能同上,返回转换后的地址。
int_addr_t inet_addr(const char *strptr);
  • inet_ntoa( )
    将32位网络字节序二进制地址转换成点分十进制的字符串。
char *inet_ntoa(stuct in_addr inaddr);
  • inet_pton()
    IPV4/IPV6的地址转换成binary格式
int inet_pton(int af, const char *src, void *dst);

到这里就结束啦!
在这里插入图片描述

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修成真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值