网络编程基础知识

一、协议相关

1、TCP/IP协议

OSI 参考模型                    TCP/IP模型

   应用层                               应用层

   表示层

   会话层

   传输层                               传输层

   网络层                               网络层

   数据链路层                        数据链路层

   物理层

各层所传输的数据类型:

“应用层”将其数据以“数据段”的形式传送到“传输层”,

 “传输层”将“数据段”分割成“数据包”,然后再将“数据包”传送到“网络层”,

  “网络层”再将“数据包”分割成“IP数据报”,然后再将其传送到“数据链路层”,

   然后“数据链路层”将“IP数据报”转化成“数据帧“,然后再将其传送到物理层

  最后物理层将“数据帧”转化为其可以传送的“比特流”。

2、TCP/IP协议各层情况

 (1)应用层

   提供面向用户的服务,主要是一些应用协议,FTP(21)、HTTP(80)、SMTP(25)、

   POP3(110)、DNS(53)

 (2)传输层

  主要提供端到端的可靠的有效的通信,主要有TCP和UDP协议 (这层TCP协议将数据分组包装,并给每个数据包加上编号)

 (3)网络层

   主要做路由选择,包括IP、ARP、ICMP协议码 (这层IP协议将每个从传输层传送来的数据包加上IP包头,如IP地址等信息,即成为IP数据报)

 

  (4)数据链路层

   主要接收IP数据报并进行传输

3、端口

定义:端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口。

端口号:16位,0-65535

保留端口: 0-1023,全局分配;

自由端口: 1024-65535,本地分配

应用层进程 = (传输层协议, 主机的IP地址,传输层的端口号)

二、SOCKET编程

1、SOCKET套接字

定义:网络中不同主机上应用程序之间进行双向通信的端点的抽象,一个套接字就是网络中进程通信的一端。

2、套接字分类

(1)流式套接字

   面向连接、可靠的传输;数据无差错、无重复的发送,且按发送顺序接收;数据为字节流,无长度限制

 (2)数据报套接字

  面向无边接、不可靠的传输;数据包以独立的形式发送,不提供无差错保证,数据可能丢失或重复,且接收的顺序混乱。

(3)原始套接字

允许对较低层次的协议的访问,亦用于检验新的协议的实现

3、套接字根据通信模式分类

(1)同步(synchronous): 在回应后才可发送下一个请求

(2)异步(Asynchronous):可直接返回

4、套接字根据数据工作模式分类:

(1)阻塞

(2)非阻塞

5、面向连接的套接字

服务端                               客户端

Socket()                           Socket()

Bind()

Listen()                            Connect()      (第一次握手)

Accept()(第二次握手)

Receive()                         Send()   (第三次握手)

Send()                             Receive()

Close()                            Close()

6、无连接的套接字

主机1                           主机2

Socket()                      Socket()

Bind()                          Bind()         (如果只发送数据而不接收数据,则可不需Bind()

ReceiveFrom()             SendTo()

SendTo()                      ReceiveFrom()

Close()                         Close()

三、P2P协议

1、概念(peer to peer)

  互联网点对点的通信.

2、实现

 在现有的网络协议上实现的信息共享的技术,可能使用的是TCP、UDP或其他协议

3、功用

使用P2P,可以让一台计算机与另一台计算机直接交换数据。

4、设计架构

(1)集中式:有专用的服务器,类似于C/S结构

(2)完全分布式架构:节点既是客户端,也是服务器

(3)混合型架构:有的节点承担服务器的角色

5、P2P相关问题

P2P通信需要解决两个私网计算机的通信(建立连接)问题

(1)内网地址要外网地址的转换的实现(NAT)

(2)NAT不允许外部主机主动访问内部主机

6、什么是NAT?

Network Address Translators, 网络地址转换

7、什么是网络穿越,如何实现UDP网络穿越?

网络穿越是指在网络通信过程中,通信的一端如果是内网地址时,需要利用NAT进行地址转换。由于NAT不允许外部主机主动访问内部主机,因此通信的一端发送信息前,必须解决如何不被另一端NAT设备拦截的问题,即如何穿越对方NAT的阻止。

基于Server的UDP网络穿越:

如果客户端A想向B发送信息,则其网络穿越过程为:

(1)A和B分别登录服务器S;

(2)A发送命令给S,请求S命令B向A方向打洞;

(3)服务器S命令B向A打洞;

(4)B收到消息后向A发送消息;

(5)A向B发送消息,实现网络穿越;

三、FTP编程

1、FTP协议

(File Tranfer Protocol)文件传输协议。

FTP是一种C/S体系结构;与Socket程序的区别在于定义了服务器端与客户端的行为模式。

2、FTP的作用

(1)文件共享;

(2)通过应用程序直接或间接使用远程主机;

(3)提供一致性的协议,避免用户在不同主机上产生不同的操作方式;

(4)提供可靠及有效率的数据传输;

3、FTP原理

FTP协议要用到两个TCP连接:

(1)控制连接:用来在FTP客户端与服务器之间传递命令,连接是永久的;

(2)数据连接:用来上传或下载数据,连接是临时的。

4、FTP数据传输的工作方式

(1)PORT方式: 客户主动式;

    客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要发送数据时,客户端使用并监听某临时端口,并在命令链路上用PORT命令告诉服务器采用主动传输方式。于是服务器从20端口向客户端的临时端口发送连接,建立一条数据链路来传送数据。

(2)PASV方式: 客户被动式

     客户端向服务器的FTP商品(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要发送数据时,客户端告诉服务器采用被动传输方式,于是服务器使用并监听某临时端口,并在命令链路上用PASV命令告诉客户端对应的端口号。于是客户端向服务器的端口发送连接请求,建立一条条块块数据链路来传送数据。

5、相关说明

选择用PASV方式还是PORT方式登录FTP服务器,选择权在FTP客户端。

四、HTTP编程

1、概念

Hypertext Transfer Protocol,超文本传输协议

2、HTTP协议的内容

(1)HTTP请求信息(标题)

(2)HTTP方法

(3)HTTP响应信息

(4)URL;

(5)HTTP流程

3、HTTP无状态

(1)定义

HTTP无状态(stateless)是指每一次请求和响应都是独立的,服务器不为一次“请求-响应”保留任何状态信息以使下一次“请求-响应”能够根据上一次的“请求—响应”作出相应变化。

HTTP协议对每次“请求—响应”都一视同仁,两次不同的“请求—响应”不会相互影响。

(2)问题:基于WEB的购物车;

解决方法:使用Cookie、Session等保存HTTP状态

4、HTTP持久连接

(1)定义

服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。

(2)工作方式

1)流水线方式:客户在收到HTTP的响应报文之前就能够接着发送新的请求报文。

2)非流水线方式,客户在收到前一个响应后才能发出下一个请求。

5、HTTP报文

6、HTTP请求方法

(1)Get方法

取回请求URL标志的任何信息。如在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用Get方法向服务器获取资源。

用Get方法是不安全的,因为这样传送的数据将显示地连接在网络地址后面,但此方式传输速度较快,而且Get方式会受到URL的最大长度的限制,为1024KB。

(2)Post方法

为请求报文准备数据,即要求被请求服务器接受附在请求消息后面的数据,常用于提交表单。

用Post方法是隐式地进行数据传送,可传输较大的数据,最大可达到2MB,客户端将通过消息结构体来向服务器传输数据。

消息结构体

{

消息头,

消息体

};

响应消息

{

消息头,

空行

消息体

}

(3)Head方法

类似Get方法,不响应页面Body部分,用于获取资源的基本信息,即检查链接的可访问性及资源是否修改

7、Get和Post的本质区别?

使用GET,form中的数据将编码到url中,而使用Post的form中的数据则在http协议的header中传输。

在使用上,当且仅当请求本身不会改变服务器数据和状态时使用Get;当请求会改变服务器数据或状态时,应该使用post。

对于服务器来说,Get方法是安全的,post方法可能是不安全的。

8、在IE地址栏中输入域名后的HTTP流程

(1)URL自动解析

(2)获取IP, 建立TCP连接;

(3)客户端浏览器向服务器发出HTTP请求;

(4)Web服务器应答,并向浏览器发送数据;

(5)Web服务器关闭TCP连接

五、网络安全

1、对称加密算法(symmetric Encryption)

对称加密算法是指对信息的加密和解密都使用相同的密钥,也称为密钥密码算法。

对称加密算法的加密强度与密钥长度对应。

对称加密运行速度比非非称加密要快得多,处理大量数据时最好使用对称加密。

2、非对称加密算法(Asymmetric Encryption)

非对称加密算法对信息的加密与解密使用不同的密钥,用来加密的密钥(公钥)是可以公开的,用来解密的密钥(私钥)需要保密,又被称为公钥加密算法。

典型非对称加密算法:

RSA算法:将两个大素数合成一个大数很容易,但反之则非常困难。其安全性依赖于作为公钥的大数n的位数。

DSA算法:

3、数字信封技术

加密过程:

(1)使用对称加密算法对明文进行加密;

(2)利用非对称加密算法对对称密钥进行加密;

(3)将加密结果发往接收方。

解密过程:

(1)利用非对称解密算法对对称密钥密文进行解密获取对称密钥;

(2)用对称密钥对密文进行解密恢复成明文。

4、数字签名(Digital Signature)

私钥加密,公钥解密

猜你喜欢

转载自blog.csdn.net/dongshengliao/article/details/6422569