TCP/IP协议和C/S模式--TCP/IP详解笔记

一.TCP/IP协议简介

       TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。


二.TCP/IP协议分层


提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同。如图所示

a69f99a0525743f0bebb2ec9a8b2f39c.jpg

       第一层:应用层。是与用户交互的界面,他为用户提供所需要的各种服务,包括远程登录,文件传输和电子邮件等。这里面有http,ftp,等等我们熟悉的协议。        TCP/IP协议族按照层次由上到下,层层包装。

       第二层:传输层。著名的TCP(传输控制协议)和UDP协议(用户数据报协议)和ICMP协议(互联网控制消息协议)都在这个层次。为应用程序提供通信服务,这种通信又叫端对端的通信。TCP协议,以建立高可靠性的消息传输为目的,它负责大量的用户数据按一定的长度组成多个数据包进行发送,并在接受到数据包之后按分解顺序重组和恢复用户数据。它是一种面向连接的可靠的双向通信的数据流。UDP协议,无连接的、不可靠的传输层协议,它把用户数据分解成多个数据包发送给接收方。具有执行代码小,系统开销小和处理速度快等优点。ICMP协议,主要用户主机和网关以及互联网管理中心等的消息的通信,以达到控制管理网络运行的目的。ICMP协议能发送错误消息给数据报的IP主机,还有限制流量的功能。

       第三层:网络层。IP协议就在这里,它负责对数据加上IP地址和其他的数据(后面会讲到)以确定传输的目标。

       第四层:数据链路层。这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。再往下则是硬件层次了,负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等(这些我们就不用关心了,我们也不做网卡),所以有些书并不把这个层次放在tcp/ip协议族里面,因为它几乎和tcp/ip协议的编写者没有任何的关系。发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以某些文章也把tcp/ip协议族称为tcp/ip协议栈。

一些基本的常识

互联网地址(ip地址)

       网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考其他文档。需要注意的是IP地址是网络号+主机号的组合,这非常重要。


域名系统

域名系统是一个分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务。



RFC

RFC是什么?RFC就是tcp/ip协议的标准文档,在 这里我们可以看到RFC那长长的定义列表,现在它一共有4000多个协议的定义,当然,我们所要学习的,也就是那么十几个协议而已。



端口号(port)

注意,这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。



应用编程接口

现在常用的编程接口有socket和TLI。而前面的有时候也叫做“Berkeley socket”,可见Berkeley对于网络的发展有多大的贡献。


摘自:https://www.wmzos.com/?id=13

三.客户端与服务器模式

      客户机/服务器模式要求每个应用程序由两部分组成:一部分负责启动通信,另一部分负责对他进行应答。服务器是指能在网络上提供服务的任何程序;客户机是指用户为得到某种服务所需要运行的程序。服务器包括两部分:主程序和从程序。主程序负责接受来自客户的请求,从程序一般有几个,它们负责处理各个客户请求。

     服务器通常作为应用程序,而不是主机。服务器作为应用程序的优点:它们可以在任何一个支持该通信协议的计算机上运行,这样不同的服务器可以在同一个分时系统上运行,或在同一台个人计算机上运行。

     客户和软件设计中的算法

     客户软件设计和服务器软件设计的主要区别在于:

      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)服务器死锁

     因为一个客户的行为贰拾服务器不能处理其他客户的请求

打赏

0 评论

发表评论