浅谈c++中的开源框架类目--分享一(TCP协议栈)

这个系列Lee哥会分享一些c++中的开源框架。

主要从TCP协议栈、框架、并发性、数据库、国际化、压缩、日志、多媒体库、序列化、XML库、脚本、Json库、数学库、安全、WEB应用框架、网络库、异步事件等方面来分享。分享的内容不仅限于自己来写,有会借鉴网上大牛们的一些文章与大家分享。

下文转载于:

TCP协议栈

1.什么是TCP/IP?

TCP/IP是一类协议系统,它是用于网络通信的一套协议集合.

传统上来说TCP/IP被认为是一个四层协议


1)网络接口层:

主要是指物理层次的一些接口,比如电缆等.

2)网络层:

提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换.

在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议).

3)传输层:

为网络提供了流量控制,错误控制和确认服务.

在TCP/IP协议族中有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议).

4)应用层:

为网络排错,文件传输,远程控制和Internet操作提供具体的应用程序

2.数据包

在TCP/IP协议中数据先由上往下将数据装包,然后由下往上拆包

在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头,当上层的数据到达本层的时候,会将数据加上本层的报头打包在一起,继续往下传递.

在拆包的时候,每一层将本层需要的报头读取后,就将剩下的数据往上传.

这个过程有点像俄罗斯套娃,所以有时候人们也会用俄罗斯套娃来形容这个过程.

3.网络接口层

这一块主要主要涉及到一些物理传输,比如以太网,无线局域网.这里就不做详细的介绍了

4.网络层

前面有提到,网络层主要就是做物理地址与逻辑地址之间的转换.

目前市场上应用的最多的是32位二进制的IPv4,因为IPv4的地址已经不够用了,所以128位二进制的IPv6应用越来越广泛了(但是下面的介绍都是基于IPv4进行的)

1)IP:

TCP/IP协议网络上的每一个网络适配器都有一个唯一的IP地址.

IP地址是一个32位的地址,这个地址通常分成4端,每8个二进制为一段,但是为了方便阅读,通常会将每段都转换为十进制来显示,比如大家非常熟悉的192.168.0.1

IP地址分为两个部分:

网络ID主机ID

但是具体哪部分属于网络ID,哪些属于主机ID并没有规定.

因为有些网络是需要很多主机的,这样的话代表主机ID的部分就要更多,但是有些网络需要的主机很少,这样主机ID的部分就应该少一些.

绝大部分IP地址属于以下几类

A类地址:IP地址的前8位代表网络ID,后24位代表主机ID。B类地址:IP地址的前16位代表网络ID,后16位代表主机ID。C类地址:IP地址的前24位代表网络ID,后8位代表主机ID。

这里能够很明显的看出A类地址能够提供出的网络ID较少,但是每个网络可以拥有非常多的主机

但是我们怎么才能看出一个IP地址到底是哪类地址呢?

如果32位的IP地址以0开头,那么它就是一个A类地址。如果32位的IP地址以10开头,那么它就是一个B类地址。如果32位的IP地址以110开头,那么它就是一个C类地址。

那么转化为十进制(四段)的话,我们就能以第一段中的十进制数来区分IP地址到底是哪类地址了。

注意:

十进制第一段大于223的属于D类和E类地址,这两类比较特殊也不常见,这里就不做详解介绍了。每一类都有一些排除地址,这些地址并不属于该类,他们是在一些特殊情况使用地址(后面会介绍)除了这样的方式来划分网络,我们还可以把每个网络划分为更小的网络块,称之为子网(后面会介绍)

全是0的主机ID代表网络本身,比如说IP地址为130.100.0.0指的是网络ID为130.100的B类地址。

全是1的主机ID代表广播,是用于向该网络中的全部主机方法消息的。IP地址为130.100.255.255就是网络ID为130.100网络的广播地址(二进制IP地址中全是1,转换为十进制就是255)

以十进制127开头的地址都是环回地址。目的地址是环回地址的消息,其实是由本地发送和接收的。主要是用于测试TCP/IP软件是否正常工作。我们用ping功能的时候,一般用的环回地址是127.0.0.1

2)地址解析协议ARP

简单的来说ARP的作用就是把IP地址映射为物理地址,而与之相反的RARP(逆向ARP)就是将物理地址映射为IP地址。

3)子网

前面提到了IP地址的分类,但是对于A类和B类地址来说,每个网络下的主机数量太多了,那么网络的传输会变得很低效,并且很不灵活。比如说IP地址为100.0.0.0的A类地址,这个网络下的主机数量超过了1600万台。

所以子网掩码的出现就是为了解决这样的问题。

我们先回顾一下之前如何区分主机IP和网络IP的。

以A类地址99.10.10.10为例,前8位是网络IP,后24位是主机IP。(如下图)

子网掩码也是一个32为的二进制数,也可以用四个十进制数来分段,他的每一位对应着IP地址的相应位置,数值为1时代表的是非主机位,数值为0时代表是主机位。

由表格可以很清晰的看出,网络IP仍是由之前的分类来决定到底是多少位,主机IP则是由子网掩码值为0的位数来决定,剩下的则是子网IP

5传输层

传输层提供了两种到达目标网络的方式

传输控制协议(TCP):提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议。用户数据报协议(UDP):只提供了基本的错误检测,是一个无连接的协议。

特点:

1)UDP:

把数据打包数据大小有限制(64k)不建立连接速度快,但可靠性低

2)TCP:

建立连接通道数据大小无限制速度慢,但是可靠性高

由于传输层涉及的东西比较多,比如端口,Socket等,都是我们做移动开发需要了解的,之后的文章中我们再具体做介绍,这里就不讲解了。

6应用层

应用层做为TCP/IP协议的最高层级,对于我们移动开发来说,是接触最多的。

运行在TCP协议上的协议:

HTTP(HypertextTransferProtocol,超文本传输协议),主要用于普通浏览。HTTPS(HypertextTransferProtocoloverSecureSocketLayer,orHTTPoverSSL,安全超文本传输协议),HTTP协议的安全版本。FTP(FileTransferProtocol,文件传输协议),由名知义,用于文件传输。POP3(PostOfficeProtocol,version3,邮局协议),收邮件用。SMTP(SimpleMailTransferProtocol,简单邮件传输协议),用来发送电子邮件。TELNET(TeletypeovertheNetwork,网络电传),通过一个终端(terminal)登陆到网络。SSH(SecureShell,用于替代安全性差的TELNET),用于加密安全登陆用。运行在UDP协议上的协议:

BOOTP(BootProtocol,启动协议),应用于无盘设备。NTP(NetworkTimeProtocol,网络时间协议),用于网络同步。DHCP(DynamicHostConfigurationProtocol,动态主机配置协议),动态配置IP地址。其他:

DNS(DomainNameService,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。ECHO(EchoProtocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。SNMP(SimpleNetworkManagementProtocol,简单网络管理协议),用于网络信息的收集和网络管理。ARP(AddressResolutionProtocol,地址解析协议),用于动态解析以太网硬件的地址。

发布于 2025-01-03
127
下一篇:十大最奇特行星
目录

    推荐阅读