网络编程总结(一):初识互联网

OSI

所谓计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件、软件、数据信息等资源。

计算机网络中实现通信必须有一些约定,这些预定被统称为通信协议。通信协议负责对传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定处理标准。为了让两个节点之间能够进行对话,必须在他们之间建立通信工具,使得彼此之间能够进行信息交换。

通信协议通常由三部分组成:

  • 语法,即数据与控制信息的结构或格式。

  • 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应。

  • 同步,即事件实现顺序的详细说明。

ISO 于 1978 年提出“开放系统互连参考模型”,即著名的 OSI(Open System Interconnection),开放系统互连参考模型力求将网络简化,并以模块化的方式来设计网络。

开放系统互连参考模型把计算机网络分成物理层、数据链路层、网络层、传输层、会话层、表示层和应用层七层,受到计算机界和通信业的极大关注。通过十多年的发展和推进,OSI 模式已成为各种计算机网络结构的参考标准。

  1. 物理层

    主要定义物理设备标准, 如网线的接口类型、各种传输介质的传输速率等. 主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输, 到达目的地后再转化为1、0, 也就是常说的数模与模数转换). 这一层的数据叫做比特(bit), 主要设备: 集线器、网线.

  2. 数据链路层

    主要将从物理层接收的数据进行MAC地址的封装与解封装. 常把这一层的数据叫做帧, 主要设备: 网卡、交换机.

  3. 网络层

    选择合适的网间路由和交换结点, 确保数据及时传送,将从下层接收到的数据进行IP地址的封装与解封装, 称为IP协议. 常把这一层数据叫做数据包, 主要设备: 路由器.

  4. 传输层

    定义了一些传输数据的协议和端口, 如TCP、UDP协议, 主要将从下层接收的数据进行分段和传输,到达目的地址后再进行重组, 以往把这一层数据叫做段.

  5. 会话层

    通过传输层建立数据传输通路, 在系统之间发起会话或者接受会话请求(设备之间需要互相认识)

  6. 表示层

    主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片、声音等)

  7. 应用层

    主要是一些终端的应用, 比如说 FTP(各种文件下载)、浏览器、QQ等, 可以将其理解为在电脑屏幕上可以看到的东西, 也就是终端应用.

就如上面所说,OSI 只是一个参考模型,实际上我们现在更加常用的是 TCP/iIP

TCP/IP 协议族

我们常常把 TCP/IP 协议挂在嘴边,实际上它并不是一个协议,而是一个网络通信模型,是一整个网络传输协议家族,通常被成为 TCP/IP 协议族,之所以叫这个名字,是因为该协议家族最早通过的两个协议标准,也是该家族的核心协议:

  • TCP - 传输控制协议
  • IP - 网际协议

TCP/IP 提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化,它将软件通信过程抽象化为四层,采用堆栈的方式,分别实现出不同通信协议,所以通常被视为简化版的 OSI。

TCP/IP 中的应用层

该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。 应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。

每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一: 面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议。 常用的应用层协议有:

运行在 TCP 协议上的协议:

  • HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。

  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。

  • FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。

  • POP3(Post Office Protocol, version 3,邮局协议),收邮件用。

  • SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。

  • TELNET(Teletype over the - Network,网络电传),通过一个终端(terminal)登陆到网络。

  • SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

运行在 UDP 协议上的协议:

  • BOOTP(Boot Protocol,启动协议),应用于无盘设备。

  • NTP(Network Time Protocol,网络时间协议),用于网络同步。

  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

其他:

  • DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。

  • ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。

  • SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。

  • ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。

TCP/IP 中的传输层

提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。

TCP/IP 中的网络层

负责相邻计算机之间的通信。其功能包括三方面。

  1. 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。

  2. 处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。

  3. 处理路径、流控、拥塞等问题。

网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。

IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。

ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。

Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。

TCP/IP 中的网络接口层

物理层是定义物理介质的各种特性:

  1. 机械特性;

  2. 电子特性;

  3. 功能特性;

  4. 规程特性。

常见的接口层协议有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。

名词定义

IP 协议

网际协议(英语:Internet Protocol,缩写为 IP),或称互联网协议,是用于报文交换网络的一种面向数据的协议。

IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP定义了寻址方法和数据报的封装结构。第一个架构的主要版本,现在称为IPv4,仍然是最主要的互联网协议,尽管世界各地正在积极部署IPv6。

数据在IP互联网中传送时会被封装为数据报文。IP协议的独特之处在于:在报文交换网络中主机在传输数据之前,无须与先前未曾通信过的目的主机预先创建好一条特定的“通路”。互联网协议提供了一种“不可靠的”数据包传输机制(也被称作“尽力而为”);也就是说,它不保证数据能准确的传输。数据包在到达的时候可能已经损坏,顺序错乱(与其它一起传送的报文相比),产生冗余包,或者全部丢失。如果应用需要保证可靠性,一般需要采取其他的方法,例如利用IP的上层协议控制。

IP 地址

IP 地址是 IP 协议提供的一种统一的地址格式,用于唯一地标识网络中的一个通信实体,就好比我们的门牌号。

IP 地址被分为 A、B、C、D、E 五大类,每个类别的网络标识和主机标识都各有规则:

类别最大网络数IP 地址范围最大主机数私有 IP 地址范围
A162(2^7-2)0.0.0.0-127.255.255.2551677721410.0.0.0-10.255.255.255
B16384(2^14)128.0.0.0-191.255.255.25565534172.16.0.0-172.31.255.255
C2097152(2^21)192.0.0.0-223.255.255.255254192.168.0.0-192.168.255.255

IP 地址用于表示网络上的通信实体,但一个通信实体可以有多个应用程序同时提供网络服务,所以还需要使用端口来加以区分。

端口

计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口。所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样。

端口号可以从 0~65535 ,通常将它分为如下三类:

  • 公认端口:从 0~1023,它们紧密绑定一些特殊服务

  • 注册端口:从 1024~49151,它们松散的绑定一些服务,应用程序通常使用这个范围内的端口

  • 动态端口:从 49152~65535 ,这些端口是应用程序使用的动态端口,应用程序一般不会主动使用这些端口。

可以在这个网站查看常用的端口:TCP/UDP端口列表

TCP 协议

TCP是面向连接的通信协议,由于TCP是面向连接的所以只能用于端到端的通讯。通过三次握手建立连接,通讯完成时要拆除连接。

三次握手:

  1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

  2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,

UDP 协议

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。

UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。

参考资料

Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1