TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。
提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同。如图所示
TCP/IP协议族按照层次由上到下,层层包装。
第一层:应用层。是与用户交互的界面,他为用户提供所需要的各种服务,包括远程登录,文件传输和电子邮件等。这里面有http,ftp,等等我们熟悉的协议。
第二层:传输层。著名的TCP(传输控制协议)和UDP协议(用户数据报协议)和ICMP协议(互联网控制消息协议)都在这个层次。为应用程序提供通信服务,这种通信又叫端对端的通信。TCP协议,以建立高可靠性的消息传输为目的,它负责大量的用户数据按一定的长度组成多个数据包进行发送,并在接受到数据包之后按分解顺序重组和恢复用户数据。它是一种面向连接的可靠的双向通信的数据流。UDP协议,无连接的、不可靠的传输层协议,它把用户数据分解成多个数据包发送给接收方。具有执行代码小,系统开销小和处理速度快等优点。ICMP协议,主要用户主机和网关以及互联网管理中心等的消息的通信,以达到控制管理网络运行的目的。ICMP协议能发送错误消息给数据报的IP主机,还有限制流量的功能。
第三层:网络层。IP协议就在这里,它负责对数据加上IP地址和其他的数据(后面会讲到)以确定传输的目标。
第四层:数据链路层。这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。再往下则是硬件层次了,负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等(这些我们就不用关心了,我们也不做网卡),所以有些书并不把这个层次放在tcp/ip协议族里面,因为它几乎和tcp/ip协议的编写者没有任何的关系。发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以某些文章也把tcp/ip协议族称为tcp/ip协议栈。
网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考其他文档。需要注意的是IP地址是网络号+主机号的组合,这非常重要。
摘自: http://blog.csdn.net/goodboy1881/article/details/665041
客户机/服务器模式要求每个应用程序由两部分组成:一部分负责启动通信,另一部分负责对他进行应答。服务器是指能在网络上提供服务的任何程序;客户机是指用户为得到某种服务所需要运行的程序。服务器包括两部分:主程序和从程序。主程序负责接受来自客户的请求,从程序一般有几个,它们负责处理各个客户请求。
服务器通常作为应用程序,而不是主机。服务器作为应用程序的优点:它们可以在任何一个支持该通信协议的计算机上运行,这样不同的服务器可以在同一个分时系统上运行,或在同一台个人计算机上运行。
客户和软件设计中的算法
客户软件设计和服务器软件设计的主要区别在于:
1.大多数客户软件在与多个服务器进行交互时,不必明显处理并发性。
2.大多数客户软件不需要强行保护,他可以依靠操作系统自动的强行执行保护。
客户软件要比服务器软件简单
(1)主要细节问题
标识服务器的位置(ip,端口)。
分析地址参数。
查找域名。
由名字查找某个众所周知的端口号。
端口号和网络字节序以及有名字查找协议
(2)TCP客户程序算法
1.找到与之通信的服务器ip,协议端口号
2.创建一个套接字描述
3.指定次连接需要一个在本地机器上任意的未使用的端口
4.与服务器建立连接
5.使用应用协议与服务器通信(请求和应答)
6.关闭连接
(3)UDP 客户程序算法
1.找到与之通信的服务器ip,协议端口号
2.创建套接口描述字
3.指定此连接需要一个在本地机器上任意的未使用的端口
4.指定数据包要发往的服务器或服务器建立连接
5.使用应用协议与服务器通信
6.关闭连接
服务器软件设计算法
⑴面向连接的服务器算法
① 服务器接受客户端的连接请求;
② 通过这个连接发送所有的通信数据;
③ 从客户端接受请求并做出应答;
④服务器在完成交互后关闭请求;
⑵无连接的服务器算法
无连接的设计方法中,一个套接口可以与多个主机通信,不会出现资源耗尽的问题。但是它的可靠性相对而言较差。
⑶迭代服务器的算法 在一个时刻只能处理一个客户请求的服务器叫做迭代服务器
① 创建一个套接口,并将它绑定在众所周知的服务器端口上;
② 从套接口上取下一个连接请求,并获得该请求的套接字
③ 重复读取请求队列中的连接请求,构造一个响应,按照响应的协议向客户发回响应
④ 当与特定的客户完成交互之后关闭连接,并接受新的连接请求
⑷并发服务器的算法
并发服务器就是就是同一时刻可以处理多个客户请求的服务器。大多数的并发服务器使用多进程来实现并发性,一个主进程最先开始运行,使用套接口在众所周知的端口监听连接请求,并为每一个请求创建一个服务器进程,由一个从进程来处理一个客服的通信。
并发无连接服务器的算法步骤
1.主1 创建UDP套接口并将其绑定到提供服务的服务器端口上;
2. 主2 通过重复调用recefrom()来接受客户端的请求,并创建一个新的从进程来处理响应;
3.从1 由于接受到一个特定的请求以及访问到该套接口而被创建。
4.从2 跟进应用协议构造一个应答,并用sendto将该应答发回到客户。
5. 从3 从程序在处理完一个请求后终止。
面向连接并发服务器步骤
1.主1 创建UDP套接口并将其绑定到众所周知的端口;
2.主2 将套接口设置为被动模式,作为服务器使用
3.主3 通过重复调用recefrom()来接受客户端的请求,并创建一个新的从进程来处理响应;
4.从1 接受一个连接而被创建
5.从2 用该连接与客户进行交互,读取请求并发回响应
6.从3 关闭连接并退出,在处理完来自一个客户的所有请求后,从进程就退出。因为创建进程耗费的紫原比较多,所以无连接服务器很少采用并发实现。
(5)服务器死锁
因为一个客户的行为贰拾服务器不能处理其他客户的请求