【学习总结】网络编程技术

1.网络结构

参考资源:互联网协议入门(一)、互联网协议入门(二)、DNS原理入门、三次握手与四次挥手

互联网通过通信协议来实现网络中不同主机间的数据传输与通信,其基本协议是TCP/IP协议。一般将互联网的实现分为五个层次,每个层次都对应着专门的通信协议:

通信协议 说明
应用层 FTP/HTTP/SMTP等 直接面对用户,对不同程序的数据分别进行解析的协议
传输层 TCP/UDP协议 端口到端口,是程序进程间的通信
网络层 IP协议 主机到主机,通过指定的IP对主机进行连接
链接层 以太网协议 将数据分为head+data形式,head中包括接入网络的设备的网卡MAC地址
物理层 光缆、电缆、双绞线等实体链路

将主机进行连接的物理方式

  • 国际标准化组织ISO提出的开放系统互连基本参考模型 OSI(Open Systems Interconnection Reference Model)将网络体系结构分为七层,分别为应用层、表示层、回话层、运输层、网络层、数据链路层和物理层。
  • Socket套接字通过绑定主机的IP地址和进程的端口号来实现数据传输通信。
  • 各层间的数据通信都以数据帧的形式进行传输,每个数据帧分标头(Head)+数据(Data)形式,至上而下,每层中数据帧的标头(Head)部分包括版本、长度、发送/接收端地址等信息,数据(Data)部分包含上一层的数据帧。

2.通信协议

2.1网际协议IP

IP地址给互联网上的每台主机(或路由器)的每个接口分配一个在全世界范围内唯一的32位或64位的标识符(IPv4或IPv6,这里主要介绍IPv4)。根据IP协议发送的数据称为IP数据包,包含标头和数据两部分,标头部分主要包括版本、长度、IP地址等信息,数据包的总长度最大为65,535字节。“动态IP地址”指计算机开机后会自动分配到一个IP地址,每个子网中有一台计算机(DHCP服务器)负责管理和分配本网络的所有IP地址。地址解析协议ARP逆地址解析协议RARP用于将IP地址和物理MAC地址进行匹配查询,目前DHCP协议中已经包含了该协议的功能。

子网的划分可以将物理上处于同一单元的不同主机归为一个子网络,不管单元内部存在多少个主机(甚至子网),在其外部网络看来该单元仍表现为一个统一的网络。三级IP地址的表现方式如下:

IP地址::=={<网络号>,<子网号>,<主机号>}

子网掩码可以指示两台主机是否处于同一子网内,当主机IP和子网掩码进行逐位的与运算时,可以得到该子网的网络地址,便于网络通信时路由表的查找。

DNS协议用于进行域名与IP地址间的转换,相对于IP地址面对主机的特性,域名则是面向用户的。DNS服务器专门用于进行域名查询的服务器。域名的表现方式如下:

主机名.次级域名.顶级域名.根域名

2.2端到端通信协议

端到端通信指的是两个主机中的应用进程相互通信的过程,主要分为面向连接的TCP无连接的UDP通信。主机上的应用程序使用指定的协议端口号与远程服务器的相应端口进行通信和数据传输。16位的端口号可允许有65,535个不同的端口号,其中0~1023的端口被系统占用,用户只能选用大于1023的端口与服务器进行联系。此外为了让互联网上所有的客户程序都能与服务器端建立联系,服务器 程序使用的端口是固定的,而相反,客户端程序使用的端口是可以进行动态选择的。

用户数据报协议UDP采用广播的方式发送UDP数据报,数据报的标头Head只有8个字节包含了进程的发送端口与接收端口。UDP在发送数据时不需要先建立连接,没有阻塞控制,不提供可靠交付。UDP支持一对一、一对多、多对一和多对多的交互通信,相比IP的数据报服务增加了复用和分发以及差错控制的功能。

传输控制协议TCP是面向连接的服务,在发送TCP报文段前需要先建立连接,传输结束后需要释放连接。TCP报文段的标头Head有20+4N个字节,包含发送与接收端口等。为了实现可靠的传输,TCP连接具有停止等待超时重传流量控制拥塞控制等功能。TCP采用三次握手的办法建立连接,以及四次挥手的办法释放连接,详见三次握手与四次挥手。

TCP协议与UDP协议的主要区别:

  1. TCP是基于连接的,UDP是基于无连接的;
  2. TCP对系统资源的要求较多,UDP要求较少;
  3. UDP程序结构较简单;
  4. TCP采取流模式,UDP是数据报模式;
  5. TCP保证数据准确性和数据顺序,UDP可能丢包且不保证数据顺序。

2.3应用程序协议

文件传输协议FTP

超文本传输协议HTTP

简单邮件传输协议SMTP

3.套接字Socket

套接字Socket用于描述进行通信的客户端与服务器端的IP地址与端口号,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

3.1套接字的连接过程

  • 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
  • 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  • 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

 

3.2套接字类型

C/S(客户端/服务器)结构采用的异步非阻塞套接字,这也是最为常用的套接字类型。主要的套接字类型如下:

  • 同步方式:指发送方发送数据包后不等待接收方响应就接着发送下一个数据包。
  • 异步方式:指当发送方发送一个数据包后一直等到接收方响应后再发送下一个数据包。
  • 阻塞套接字:执行此套接字的网络调用时,直到调用成功才返回,否则此套接字就一直阻塞在网络调用上。
  • 非阻塞套接字:执行此套接字的网络调用时,不管是否执行成功,都立即返回。

异步传输与同步传输方式的区别:

  1. 异步传输是面向字符的传输,而同步传输是面向字节的传输;
  2. 异步传输的单位是字符,而同步传输的单位是帧;
  3. 异步传输通过字符起止的开始和停止码获得再同步的机会,而同步传输则是在数据中抽取同步信息;
  4. 异步传输对时序的要求较低,而同步传输往往通过特定的时钟线路协调时序;
  5. 异步传输相对于同步传输效率较低。

 

 

 

你可能感兴趣的:(个人学习)