<网络编程>复习资料
第一章: 网络编程通信基础
1,TCP/IP协议示意图
2,端口
定义: 端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口。端口是操作系统可分配的一种资源;应用程序(进程)通过系统调用与某端口绑定(binding)后,传输层传给该端口的数据都被相应进程接收,相应进程发给传输层的数据都通过该端口输出。
端口两种分配方式:全局分配(静态分配),本地分配(动态分配);
端口号:16位的整数,0-65535;
保留端口:0-1023,全局分配;
自由端口:1024-65535,本地分配;
TCP常用保留端口: FTP(21), HTTP(80), SMTP(25), POP3(110)
UDP常用保留端口:DNS(53), TFTP(69), SNMP(161)
在Internet中用一个三元组可以在全局中唯一标识一个应用层进程:应用层进程=(传输层协议,主机的IP地址,传输层的端口号)。
UDP与TCP的端口各自独立;
3,在网络通信中为什么要引入端口?
答: 在网络通信过程中,需要唯一识别通信两端的端点,即运行于某机器中的应用程序。如果没有引入端口,则只能通过进程号进行识别。进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前并不知道自己的进程号,如果需要运行后再广播进程号则很难保证通信的顺利进行。而引入端口后,对于一些需要公开的服务如FTP\HTTP等,可以通过固定端口的机制提供服务。
4,服务器类工作示意图
5,相关知识
广播地址: 主机号为1的网络地址
回送地址: 用于网络测试或本机进程间通信.发送到这种地址的数据报不输出到线路上,而是立即被返回,又当作输入数据报在本机内部进行处理. 如首节数值为127的IP地址.常用的ping命令就是发送一个将回送地址作为目的地址的数据报.
6,常用类
命名空间: System.Net; System.Net.Sockets;
类: (1) IPAddress类;
(2) Dns类;
(3) IPHostEntry类;
(4) IPEndPoint类
IPAddress[] serverIP=Dns.GetHostAddresses(Dns.GetHostName());
则serverIP[0] 表示 ?
第二章 网络编程语言基础
1,线程:
a) 任何一个C#程序都有一个默认的线程,该线程称为主线程;
b) 一个线程要么是后台线程要么是前台线程。后台线程与前台线程类似,区别是后台线程不会影响进程终止;
c) 当属于某个进程的所有前台线程都终止后,公共语言运行库就会结束该进程,而且所有属于该进程的后台线程也都会立即停止,而不管其后台工作是否完成;
d) 线程池中的线程都是后台线程;
e) 每个进程都有一个线程池。线程池默认大小有25个线程;
f) C#中常用的线程同步的语句是lock语句;
2 编码与解码
在网络通信中,很多情况下通信双方传达的都是字符信息。但是,字符信息并不能直接从网络的一端传递到另一端,这些字符信息首先需要被转换成一个字节序列后才能在网络中传输。将字符序列转换为字节序列的过程称为编码。当这些字节传送到网络的接收方时,接收方需反过来将字节序列再转换为字符序列,这个过程称为解码。
常见编码方式:
n ASCII字符集;英语
n 非ASCII字符集;除英语外的不同的国家或地区自己的编码,如汉字GB2312 编码;
n Unicode字符集;为使国际信息交流方便,国际组织制定了Unicode字符集。它为各种语言中的每一个字符规定了统一并唯一的字符,通常用两个字节来表示一个字符。
第三章 SOCKET 编程
1,SOCKET套接字
定义: 套接字是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。
从套接字(Socket)所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程序与网络协议栈进行交互的接口。
从套接字(Socket)实现的角度来讲,套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。
从套接字(Socket)使用的角度来讲,对于套接字的操作形成了一种网络应用程序的编程接口(API)。把这一套操作套接字的编程接口函数称作套接字编程接口,套接字是它的操作对象。
2,套接字的分类
(1)流式套接字(Stream Socket)
提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。
(2)数据报式套接字(Datagram Socket)
提供无连接服务。数据包以独立包形式发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序混乱。
(3)原始套接字(Raw Socket)
原始式套接字允许对较低层次的协议,如IP、ICMP直接访问,用于检验新的协议的实现。
3,套接字根据通信模式分类:
同步(Synchronous)套接字,异步(Asynchronous)套接字
同步套接字 :客户端在发送请求后,必须在服务端有回应后才能发送下一个请求。
异步套接字:客户端在发送请求后,不必等待服务端回应就可以发送下一个请求。
4,套接字根据数据工作模式分类:阻塞、非阻塞
阻塞方式:所调用的函数只有在得到结果后才会返回,在调用返回之前,当前线程会被挂起。
非阻塞方式:与阻塞方式不同,即使不能立刻得到结果,该函数也不会阻塞当前线程,而会立刻返回。
5,面向连接的套接字
(1)Accept方法
Accept返回一个新的套接字,该套接字包含所建立的连接信息并负责处理本连接的所有通信。而服务器的监听套接字仍然负责监听,并在需要时调用Accept接受新的连接请求。
(2)Send方法
Send方法的整数返回值表示成功发送的字节数;准确来说,是返回成功向发送缓冲区发送的字节数。
(3)Receive方法
6,无连接的Socket
收发数据都不需要使用Connect方法;
如果需要接收远端数据,必须用Bind方法绑定到一个本地地址/端口上;只发送不接收,则不需要使用Bind方法。
第四章 TCP编程
1,TCP的特点: 向应用进程提供面向连接的服务;提供全双工数据传输服务;提供面向字节流的服务;
2,TCP编程与Socket的区别?
.NET提供面向TCP编程的相关类(TcpClient和TcpListener),比位于底层的Socket类提供了更高层次的抽象,它们封装TCP套接字的创建,不需要处理连接的细节。
3,什么是TCP 消息无边界问题? 如何解决?
消息无边界是指TCP以字节流形式发送消息时,并没有指定消息的长度或消息边界的标记,因此不能保证单个Send方法发送的数据被单个Receive方法接收。
解决方法: 1,发送固定长度的消息; 2,将消息长度与消息一起发送; 3,使用特殊标记分隔消息;
4,TCP消息网络流
NetworkStream netStream=tcpClient.GetStream() //获取网络流
StreamReader sr=new StreamReader(netStream,Encoding.UTF8);
StreamWriter sw=new StreamWriter(netStream,Encoding.UTF8);
…
//发送数据
string str=“发送的数据”;
sw.WriteLine(str); 写带有消息边界标记的消息
//接收数据
string receString=sr.ReadLine();
5,TCP异步
实现模式:
1,基于事件的异步设计模式;如:BackGroundWorker、PictureBox控件
2,基于IAsync的异步设计模式
第五章 UDP编程
1,UDP的特点
UDP(User Datagram Protocol)是一种简单的、面向数据报的无连接协议,提供快速但不一定可靠的传输服务。其主要特点:不需要连接,速度比TCP快;既支持一对一,又支持一对多连接(广播);UDP报头比TCP报头小,消耗带宽少;UDP传输的数据有消息边界。
2,UDP的消息发送
udpClient.Send(sendBytes,sendBytes.Length,iep); //发送
byte[] receiveBytes=udpClient.Receive(ref iep);//接收
Receive方法说明: 接收数据报,返回主机信息
3,UDP广播
所谓广播,是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收发送方发来的消息。每个广播消息包含一个特殊的地址。广播地址分为两种:本地广播,子网中的计算机;全球广播,所有计算机(255.255.255.255)
如何确定广播地址:
方法一:特别指定
IP地址: 192.168.100.2
子网掩码:255.255.255.0
广播地址:192.168.100.255
方法二:自动指定: IPAdress.Broadcast
3,UDP多播
所谓多播,又称多路广播或组播,是一种允许一个或多个发送者(多播源)将单一的数据包同时发送到多个接收者的网络技术。是将消息从一个计算机发送到本网内或全网内已加入指定组的计算机上。
组播地址:D类地址,用于标志多播组
多播网是开放的,每台计算机都可以通过程序随时加入或离开多播组。组可以是永久的,也可以是临时的。
第六章 P2P编程
1,P2P概念
P2P(Peer-to-Peer),对等互联或点对点技术。
P2P不是一种新的协议,而是利用现有的网络协议实现网络数据或资源信息共享的技术,它使用的可能是TCP、UDP或其他协议。
使用P2P技术,可以让一台计算机与另一台计算机直接交换数据,通过internet直接使用对方的文件。
2,P2P的设计架构
(1)集中式架构:有专用服务器,类似于C/S结构;
(2)完全分布式架构(单纯架构):无专用服务器,节点既是客户端,也是服务器。
(3)混合型架构:有的节点承担服务器的角色。
3,P2P相关问题
P2P通信需要解决两个私网计算机的通信(建立连接)问题:
1,内网地址到外网地址的转换的实现(NAT);
2, NAT不允许外部主机主动访问内部主机;
4,什么是NAT?
NAT(Network Address Translators),网络地址转换.
NAT功能通常被集成到路由器、防火墙、单独的NAT设备中,也可以是操作系统或其他软件(主要是代理软件,如WINROUTE)。
5,什么是网络穿越,如何实现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协议
FTP(File Tranf
er Protocol),文件传输协议。FTP是一种C/S体系结构;与Socket程序的区别在于定义了服务器端与客户端的行为模式。
FTP基于Tcp,保留端口21、20;
2,TFTP与FXP
TFTP(Trivial File Tranfer Protocol),简单文件传输协议。
FXP(File Exchange Protocol),文件交换协议。
3,FTP的作用
(1)文件共享;
(2)通过应用程序直接或间接使用远程主机;
(3)提供一致性的协议,避免用户在不同主机上产生不同的操作方式;
(4)提供可靠及有效率的数据传输;
4,FTP基本原理
FTP协议要用到两个TCP连接:控制连接,用来在FTP客户端与服务器之间传递命令,连接是永久的;数据连接,用来上传或下载数据,连接时临时的。
5,FTP工作方式
FTP协议的两种工作方式:
(1)PORT方式,客户主动式;
(2)PASV方式,客户被动式;
PORT(主动)方式的连接过程是:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端使用并监听某临时端口,并在命令链路上用PORT命令告诉服务器采用主动传输方式。于是服务器从20端口向客户端的临时端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端告诉服务器采用被动传输方式。于是服务器使用并监听某临时端口,并在命令链路上用PASV命令告诉客户端对应的端口号。最后客户端向服务器的端口发送连接请求,建立一条数据链路来传送数据。
6,相关说明
所有FTP服务器软件都支持PORT方式;
选择用PASV方式还是PORT方式登录FTP服务器,选择权在FTP客户端。
命令行下使用FTP:
ftp ftp1.scau.edu.cn
anonymous/none
get
put
第八章 HTTP编程
1,HTTP协议
HTTP(Hypertext Transfer Protocol),超文本传输协议,目前的版本是1.1
2,HTTP协议的内容
• HTTP请求信息;
• HTTP方法;
• HTTP响应信息;
• URL;
• HTTP流程;
3,HTTP无状态(stateless)
定义:客户端发送一次请求后,服务器并没有存储关于该客户端的任何状态信息。即每一次请求和响应都是独立的,服务器不为一次“请求-相应”保留任何状态信息以使下一次“请求-相应”能够根据上一次的“请求-相应”作出相应变化。HTTP协议对每次“请求-相应”都一视同仁,两次不同的“请求-相应”不会相互影响。
问题:基于WEB的购物车;
解决方法:使用Cookie、Session等保持HTTP状态;
4,HTTP持久连接
定义: 所谓持久连接就是服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。
HTTP持久连接有两种工作方式:
(1)流水线方式,客户在收到HTTP的响应报文之前就能够接着发送新的请求报文;
(2)非流水线方式,客户在收到前一个响应后才能发出下一个请求。
5,HTTP报文
6,HTTP请求报文
GET /default.html HTTP/1.1
Accept: image/gif,image/jpeg,*.*
Referer: http://www.126.com
Accept-Language:zh-cn
User-Agent: Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)
Host: www.21cn.com
其中:
Referer:请求所来自的页面,即上一个页面;
User-Agent:用户代理,即用户所使用的浏览器;
7,HTTP请求方法:
常用方法: Get\Post\Head
(1)Get方法. 取回请求URL标志的任何信息,在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源。
(2)Post方法.为请求报文准备数据,即要求被请求服务器接受附在请求消息后面的数据,常用于提交表单。
(3)Head方法. 类GET方法,不响应页面Body部分,用于获取资源的基本信息,即检查链接的可访问性及资源是否修改。
其他方法:PUT、DELETE、CONNECT、OPTIONS、TRACE;
GET和POST的本质区别是什么?
使用GET,form中的数据将编码到url中,而使用POST的form中的数据则在http协议的请求正文中传输。在使用上,当且仅当请求幂等(请求任意次返回同样的结果,本质是请求本身不会改变服务器数据和状态)时使用GET,当请求会改变服务器数据或状态时(更新数据,上传文件),应该使用POST。
对于服务器来说,GET方法是安全的,Post方法可能是不安全的(需要服务器接收数据)。
8,MIME
MIME(Multipurpose Internet Mail Extensions),多用途互联网邮件扩展,是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。
例如: text/html(HTML文档), image/gif(GIF图像)
9,在IE地址栏中输入域名后的HTTP流程
1、URL自动解析;
2、获取IP,建立TCP连接;
3、客户端浏览器向服务器发出HTTP请求;
4、Web服务器应答,并向浏览器发送数据;
5、Web服务器关闭TCP连接;
第九章 邮件编程
1,电子邮件系统
电子邮件系统包括邮件服务器和邮件客户端;邮件服务器又包括邮件发送处理服务器(遵循SMTP)和邮件接收处理服务器(遵循POP3协议)。一般的邮件服务器(126、21cn、Hotmail等)都包括这两个功能。
邮件组成: 信封、 首部、 正文
2,SMTP协议
SMTP(Simple Mail Transfer Protocol),简单邮件传输协议。主要用于提交和传送电子邮件。过程说明:SMTP服务器会主动监听TCP端口25,邮件客户端如果需要发送邮件,首先要建立一个TCP连接。当连接建立后,通信双方按协议规定执行发送邮件功能。
3,ESMTP协议
ESMTP(Extended SMTP),扩展的SMTP。与SMTP的区别在于:发送邮件时要求用户身份验证。
4,POP3协议
POP3(Post Office Protocol 3),邮件接收协议。默认端口:110;协议的主要功能:接收邮件,定义了接收邮件的流程、指令等相关内容。
5,POP3流程
POP3流程分为如下3个阶段:(1)授权阶段,认证;(2)操作阶段,邮件接收;(3)更新阶段,更新邮件信箱。
6,POP3相关
(1)客户端所发送的指令必须以CRLF结尾。
(2)服务器端响应的信息,只有两种情况:
l +OK:表示指令执行正确。
l −ERR:表示指令执行错误。
7,IMAP4
Interactive Mail Access Protocol,交互式邮件存取协议
与POP3协议类似,IMAP也提供面向用户的邮件收取服务,常用版本是IMAP4。IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱。