网络层次划分
为促使不同计算机厂家生产的计算机能够相互通信,以便建立更大范围的计算机网络,国际标准化组织(ISO)于 1978 年提出了“开放系统互联参考模型”,即OSI/RM模型(Open System Interconnection/Reference Model)。将计算机网络结构的通讯协议划分为七层,由:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中传输层完成数据传送服务。
OSI 七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
---|---|---|
应用层(Application) | 应用层 | HTTP、TFTP、FTP、NFS、WAIS、SMTP |
表示层(Presentation) | 应用层 | Telent、Rlogin、SNMP、Gopher |
会话层(Session) | 应用层 | SMTP、DNS |
传输层(Transport) | 传输层 | TCP、UDP、 |
网络层(Network) | 网络层 | IP、ICMP、ARP、RARP、AKP、UUCP |
数据链路层(Data Link) | 数据链路层 | FDDI、Ethernet、Arpanet、PDN、SLIP、PPP |
物理层(Physical) | 数据链路层 | IEEE 802.1A,IEEE 802.2 到 IEEE802.11 |
1.物理层(Physical Layer)
物理层确保原始的数据可在各种物理媒体上传输。
2.数据链路层(Data Link Layer)
- 数据链路层为网络层提供可靠的数据传输;
- 基本数据单位为帧
- 主要的协议:以太网协议;
- 两个重要设备名称:网桥和交换机。
3.网络层(Network Layer)
网络层的目的是实现两个端系统之间的数据同名传输,具体功能包括寻址和路由选择、链接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。
网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网络互连等功能;
基本数据单位IP数据包;
包含主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP 协议(Internet Control Message Protocal,因特网控制报文协议);
ARP 协议 (Address Resolution Protocal ,地址解析协议);
RARP协议 (Reverse Address Resolution Protocal,逆地址解析协议)。
重要设备:路由器。
Socket 编程
概述
socket 意为“插座”,计算机领域称为“套接字”,它是计算机之间进行通讯的一种约定或一种方式,一台计算机可以接收其他计算机的数据,也可以向其它计算机发送数据。
Socket 是网络编程的一个抽象概念。通常一个Socket表示“打开一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再选择协议类型。
在 socket 的案例中,服务器与浏览器:在浏览器获取用户的URL后,向服务器发送请求,服务器分析接收到的URL,将对应的网页内容返回到浏览器(客户端),浏览器再解析和渲染,将文字、图片、视频等元素呈现给用户。
UNIX/Linux 中的socket!
在系统中,为了统一各种硬件的操作,并简化接口,不同的硬件设备也被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。
在UNIX/和Linux中会给每个文件分配一个ID,这个ID就是一个整数,被称为 文件描述符(File Descriptor)。例如:
- 0表示一个标准输入文件(stdin),它对应的硬件设备就是键盘;
- 1表示一个标准输出文件(stdout),它对应的设备就是显示器;
UNIX/Linux程序在执行任何形式的I/O操作时,都是在读取或者写入一个文件描述符。文件描述符是一个和打开文件相关联的整数,它背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示且等,或者网络连接。
网络连接也是一个文件,它也有文件描述符!
可以通过socket()函数来创建一个网络连接,或者说打开一个网络文件,socket()的返回值就是文件描述,我们可以通过普通的文件操作函数来传输数据了。
- 用read()读取从远程计算机传来的数据;
- 用write()向远程计算机写入数据;
使用socket()创建连接后,剩下的就是文件操作了。
WIndows系统中的Socket()!
Windows 中的“文件描述符”被称为“文件句柄”。
Windows不会把Socket当作文件,会把它当作一个网络连接来对待,因此需要调用专门针对socket而设计的数据传输函数,这里就用不到针对文件操作的函数了。
客户端
在创建 TCP 连接时主动发起的叫客户端,被动响应的叫服务器。
服务器
服务器编程需要服务器进程绑定一个端口来监听来自其他客户端的连接。当某个客户端连接时,服务器就与该客户端建立Socket连接,随后的通讯就靠这个Socket连接。