网络编程(预备知识)
计算机网络的体系结构
网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机结合在一起。每层实现不同的功能,其内部实现的方法对外部其他层次来说是透明的,每层向上一层提供服务,使用下一层提供的服务;网络体系结构即网络的层次结构和每层使用的协议的集合两类非常重要的体系结构: 开放式系统互联(open system interconnection 简称 OSI) 和TCP/IP 。
OSI 系统模型
OSI 系统模型是国际化标准组织(ISO)为了实现计算机网络标准化颁布的参考模型,根据网络中数据传输的过程,将该模式分为7个层,每一层都向上一层提供服务,同时使用下层提供的服务。
OSI 参考模型结构
TCP/IP 系统模型
国际化标准组织(ISO)指定的 OSI 参考模型虽然规定得十分细致和完善,但在实际中却得不到广泛应用,原因就是它过于庞大和复杂,但它仍是此后众多协议模型的基础,与OSI 的复杂相比,TCP/IP 协议的四层结构模型获得了更广泛的使用。TCP/IP 协议是Internet 事实上的工业标准。
TCP/IP 参考模型结构
TCP/IP模型对比OSI模型
OSI和TCP/IP协议栈对
ARP(地址解析) RARP(反地址解析)ICMP是(Internet Control Message Protocol)Internet控制报文协议
用户数据进入TCP/IP协议栈的封装过程
TCP 数据包格式
TCP/IP 核心协议
概述: TCP向应用层提供可靠的面向连接的数据流传输服务,应用程序通过向TCP提交数据发送/接收端的地址和端口号而实现应用层程序的数据通信。3次握手协议:TCP 是面向连接,所谓面向连接,就是计算机双方通信时必须先建立连接,然后进行数据通信。最后断开连接。TCP在建立连接时,有以下三个步骤;第一次握手) 客户端发送一个 SYN (包含有同步序列号的标志位的数据段和通信请求)给服务器,客户端进入SYN_SEND 状态,然后等待服务器的回发确认信息;第二次握手) 服务器发一个 SYN+ACK 给客户端,确认已经收到客户端发来的信息,此时服务器进入SYN_RECV状态;第三次握手) 客户端接收到服务器发来的确认信息后,再反馈一个 ACK给服务器,完成三次握手,客户端和服务器进入ESTABLISHED状态,到此一个TCP连接就完成了。ACK:TCP 数据包首部中的确认标志,对已接收到的TCP报文进行确认;SYN: TCP/IP 建立连接使用的握手信号。
TCP 数据包格式
URG表示紧急指针字段有效;
ACK置位表示确认号字段有效;
PSH表示当前报文需要尽快交给应用层
RST置位表示复位TCP连接;
SYN用于建立TCP连接;
FIN用于释放TCP连接时。
TCP/IP 三次握手过程
四次断开(挥手)
因为TCP/IP 的连接是双向的,所以每个方向都要单独进行关闭。每当TCP单方向的数据传输结束后,都会再发送一个 FIN 过去,告诉对方我这个方向上的数据要关闭了,当双方接收到FIN后,就会通知应用层,TCP连接已经终止了数据传输。
第一次断开:客户端向服务器端发送数据后,将 FIN置1,告诉它要关闭这一方向上的数据传输。
第二次断开:服务器接收到FIN后, 将 ACK置1发送客户端 。
第三次断开:向客户端申请反方向的数据断开,将 FIN置1。
第四次断开:客户端接收到服务器端发来的请求,将 ACK置1,双方同时关闭连接。
UDP协议
UDP(用户数据报协议),是一种面向无连接的不可靠的传输协议,不需要通过3次握手来建立一个连接,因此它具有以下的特点。
1.无连接,不可靠;
2. 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息;
3. UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小
4.进程发送的报文较短,同时对报文的可靠性要求不高,那么可以使 用UDP协议。
UDP 数据包格式
源端口和目的端口:表示发送方和接收方的端口号。UDP包长度: 包括UDP首部在内的以字节为单位的UDP数据报总长度;校验和: 【校验算法】
网络数据包封包和解包过程
封包过程
主机A封包过程:
1.主机A应用程序将数据送给应用层协议加上应用层包头,如果使用 HTTP,则加上HTTP数据包头;
2,应用层将数据交给传输层,根据传输层协议加上包头(主要有 TCP,UDP)
3.传输层将数据交给IP层,IP层将添加IP层数据包头,主要涉及源IP地址和目标IP地址,并设置上层协议类型(TCP,UDP,ICMP)
4. IP层将数据交给数据层,将添加数据链路层包头,包括源MAC地址和目标MAC地址,同时选用协议类型(ARP,RARP,IP)
解包过程
主机B解包过程:
1.主机B网卡驱动接收到一帧数据,检查该数据的目的MAC地址是否为本机或广播MAC地址,如果是,读取数据链路层包头信息,根据包头中定义的协议类型(ARP,RARP,IP),去掉链路层包头传给上层,如果是IP,传递给IP层;
2,IP层检查目的IP是否为自己(广播),如果是自己,收到数据包,读取IP层包头信息(可以获取源IP地址),根据包头中定义的协议类型(TCP,UDP,ICMP),去掉IP层包头传给上层,如果是TCP,传递给TCP层;
3.TCP层读取传输层包头信息(可得到源端口),根据包头中定义的端口,去掉传输层包头传给上层应用程序,上层应用程序剥离应用层包头,获取真正数据;
IP地址
IP(Internet protocol) 网际协议,是Internet中主机的标识,Internet中的主机要与别的机器通信必须具有一个IP地址。表示形式:1.常用点分形式,如202.38.64.10,最后都会转换为一个32位的整数。
2.二进制表示方式:一个IP地址为32位(IPV4),或者128位(IPV6)IP地址由两部分组成: 网络ID 和 主机 ID网络ID:拥有同一个网络ID 的主机之间不需要路由设备,即它们是在同一个局域网内,主机 ID:局域网中每台主机的标识。特殊的IP地址:回路(环路)IP、127.0.0.1 INADDR_ANY(所有地址”、“任意地址”)
端口号
为了区分一台主机接收到的数据包应该递交给哪个进程来进行处理,使用端口号TCP端口号与UDP端口号独立端口号一般由IANA (Internet Assigned Numbers Authority) 管理1.众所周知端口:11023,1255之间为大部分众所周知端口,2561023端口通常由UNIX占用2.注册端口:1024491513.动态或私有端口:49151~65535