unix网络编程 初步了解TCP/IP协议

Posted on 2019-12-07 16:43  辉仔猿  阅读(373)  评论(0编辑  收藏  举报

1.网址(URL,uniform resource locator统一资源定位符)

URL的元素:http:(开头表示数据源的机制,也就是协议)+//(后面的字符串表示服务器的名称)+web服务器名+“/(目录名)+/(文件名)”(表示数据源的路径名)

例子:http://www.lab.glasscom.com/dirl1/file1.html

URL的文件名可以省略,大多数情况下都是index.html或者default.htm

2.文件传送协议(FTP,file transfer protocol)

FTP一种在上传、下载FTP文件时使用的协议。

3.DNS(domain  name system,域名服务系统)

  1. 功能:将ip地址和服务器名称相关联。
  2. 组成:是由域名解析器和域名服务器组成。

关于域名服务器:域名服务器保存该网的域名以及对应的ip地址,而且还具备把域名转换为ip地址的功能。

(每个域名都有对应的ip地址,但是ip地址不一定都有域名。)

域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器

  • DNS是怎么工作的? 将信息分布保存在多台DNS服务器中,这些DNS服务器相互配合,从而查找到查询的信息。
  • 如何在DNS服务器上注册并保存? DNS服务器中的所有信息都按照域名以分层次的结构来保存

4.域名

通常域名都是以句点(.)分隔的名称。

域名中每一额句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越高。例如www.baidu.com。这个域名中,com域的下一层是baidu域,再下一层是www域。

5.服务器 

服务器的构成包括处理器硬盘内存系统总线等,和通用的计算机架构类似

但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

在网络环境下,根据服务器提供的服务类型不同,分为文件服务器数据库服务器,应用程序服务器,WEB服务器等。

根据服务器档次(网络规模、服务器的综合性能)划分,分为入门级服务器、工作组级服务器、部门级服务器、企业级服务器、视频服务器。

服务器的操作系统:WINDOWS,NetWare,Unix,Linux

6."/"根目录

根目录是目录层次中最顶层的“根目录”。其实“/”本身没有名字,我们仅用“/”来表示而已。

7.HTTP的基本思路

  • 首先,客户端会向服务器发送请求消息,包括“对什么(URL)”和“进行怎样的处理(方法)”
  • 其次,服务器根据客户的要求进行工作,完成之后的结果放在响应消息里。
  • 最后,响应消息发回客户端,客户端收到消息之后,浏览器读取所需要的内容显示出来。

8.IP地址的基本知识

由一些小的子网通过路由器连接起来组成一个大的网络(超网)。

我们现实中通常用的路由器包括集线器和路由器两部分。

  1. 什么是子网?子网可以理解为用集线器连接起来的几台计算机,看成一个单位,一个子网。
  2. 什么是网络?将子网用路由器连接起来成为一个网络。
  3. 什么是路由器?一种对包进行转发的设备(其中的包指的是数据,因为数据是以包的形式传送的)
  4. 什么是集线器?一种对包进行转发的设备,分为中继式集线器和交换式集线器两种。
  5. 什么是IP地址?IP地址可以看做是“……号……室”。“号”对应网络号,“室”对应主机号这个地址的整体称为IP地址

具体的IP地址有32个bit,8个bit(一个字节byte)为一组分为4组。

网络号和主机号连起来总共是32bit,但是这两部分不是固定的。

9.子网掩码(子网掩码涉及很多内容)

子网掩码的作用:将某个IP地址划分为网络地址主机地址两部分。(?)同时可以表明一台主机所在的子网与其他子网的关系。

  • A类地址的默认的子网掩码是255.0.0.0
  • B类地址的默认的子网掩码是255.255.0.0
  • C类地址的默认的子网掩码是255.255.255.0

利用子网掩码可以把大的网络划分成子网,即VLSM(可变长子网掩码),也可以把小的网络归并成大的网络即超网

子网掩码的设定规则:

子网掩码的长度为32位,左边是网络位,用二进制“1”表示,1的数目等于网路位的长度;右边是主机位,用二进制“0”表示,0的数字等于主机位的长度。

目的:为了让掩码与ip地址做按位与运算时用0遮住原主机数,而不改变网络段数字,而且很容易通过0的位数确定子网的主机数。(?)

?怎么判断不同的计算机处于同一子网中:

找到该计算机的ip地址和子网掩码,把十进制转换为二进制后进行AND运算,然后再转换为十进制。如果结果一样,那么我们就可以认为这几个计算机在同一个子网里。

10.委托协议栈发送信息

收发数据的操作大致分为四个过程:

  1. 创建套接字(创建套接字阶段)
  2. 将管道连接到服务器终端的套接字(连接阶段)
  3. 收发数据(通信阶段)
  4. 断开管道并删除套接字(断开阶段)

套接字的概念:建立管道的关键在于管道两端的数据入口,这些出入口成为套接字。

  • 描述符:应用程序用来识别套接字的机制          
  • IP地址和端口号:客户端和服务器之间用来识别对方套接字的机制

 11.创建套接字

创建套接字的过程:应用程序调用socket申请创建套接字,协议栈根据应用程序的申请执行创建套接字的操作。

在创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。

浏览器、邮件等一般应用程序收发数据时用TCP。

DNS查询等收发较短的控制数据时用UDP。

协议栈和套接字的关系:协议栈是根据套接字中记录的控制信息来工作的。

12.网卡

电脑网卡是工作在链路层的网络组件,是局域网中连接计算机和传输介质的接口。不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

因网络上的数据率和计算机总线上的数据率不相同,所以网卡里还有对数据进行缓存的储存芯片。

网卡的功能:进行串行/并行转换

  • 网卡和局域网之间的通信:通过电缆或双绞线以串行传输方式进行的
  • 网卡和计算机之间的通信:通过计算机主板上的I/O总线以并行传输方式进行。

 13.协议栈

协议栈(Protocol Stack)是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。  协议栈在操作系统中。

使用最广泛的是英特网协议栈,由上到下的协议分别是

  • 应用层(HTTP,FTP,TFTP,TELNET,DNS,EMAIL等)
  • 运输层(TCP,UDP),网络层(IP)
  • 链路层(WI-FI,以太网,令牌环,FDDI,MAC等)
  • 物理层

协议栈和应用程序之间的具体交流过程:在接收数据的过程中,协议栈会检查收到的数据块和TCP头部的内容,如果没有数据丢失就返回ADK号。然后协议栈将数据块暂时存在接收缓冲区中,并将数据块按照顺序连接起来还原原来的数据,最后将数据交给应用程序。具体来说,协议栈是复制数据到应用程序指定的内存地址中,然后将控制流交回给应用程序。

14.负责保存控制信息的头部

头部的类型:TCP头部,以太网头部(MAC头部),IP头部

头部的作用:记录和交换控制信息。 

存放数据的数据包的构成:(从左到右顺序)以太网和IP的控制信息——TCP的控制信息——数据块

只有控制信息的数据包的构成:(从左到右顺序)以太网和IP控制信息——TCP的控制信息

通信操作中使用的控制信息分为两类:

  • 头部中的记录信息
  • 套接字(协议栈中的内存空间)中记录的信息

 15.连接阶段(将管道连接到服务器终端的套接字)

连接操作的第一步是在TCP模块出处创建表示连接操作信息的头部。

通过TCP头部中的发送方和接收方端口号就可以找到连接的套接字。

在创建套接字之后,应用程序就会调用connect,随后协议栈会将本地的套接字与服务器的套接字进行连接。

16.收发数据(通信阶段)

数据收发操作是从应用程序调用write将要发送的数据交给协议栈开始的。

协议栈接收数据后执行发送操作:

1.协议栈只会关注应用程序发过来的数据长度。协议栈并不一定接收到数据之后就立刻发送,它先把数据存放到内部的缓冲区里,并等待应用程序的下一段数据。

到底什么时候发送呢,协议栈还是有它判断的标准的:

MTU:一个网络包的最大长度,以太网中一般为1500字节。

MSS:除去头部之后,一个网络包所能容纳的TCP数据的最大长度。

2.如果数据较大的话,发送缓存区中的数据会被以MSS长度为单位拆分,拆分出来的每块数据会被放进单独的网络包中。拆分之后,当判断需要发送这些数据时,就会在每一块数据前面加上TCP头部,并根据套接字中记录的控制信息标记发送方和接收方的端口号,然后交给IP模块来执行发送数据的操作。

3,怎么确定网络包已经被接收了呢?使用ACK号确定网络包已接收

通过“序号”和“ACK号”可以确认接收方是否接收到了网络包。(这是一个双向交互的机制) 

17.接收HTTP响应消息

浏览器对于web服务器返回响应消息,需要调用read程序来获取响应消息。控制流程会通过read转移到协议栈,然后协议栈会执行接下来的操作。

18.从服务器断开到连接套接字

当完成数据发送的一方会发起断开过程。

(以下以服务器为例)

  • 服务器一方的应用程序会调用Socket库的close程序
  • 服务器的协议栈会生成包含断开信息的TCP头部
  • 协议栈会委托IP模块向客户端发送数据,同时服务器套接字会记录下断开操作的消息。

(以下以客户端为例)

  • 收到服务器发来的TCP头部,客户端的协议栈会将自己的套接字纪委进入断开操作状态
  • 客户端会向服务器返回一个ACK号,来告知服务器已经收到TCP头。协议栈就会等待应用程序来取数据。
  • 应用程序会调用read来读取数据。
  • 客户端程序会调用close来结束数据收发操作,并且生成一个TCP包,然后委托IP发送给服务器
  • 之后服务器返回ACK号,最后结束

但是最后套接字不会立刻删除。

19.包的基本知识

包的组成:包是由头部和数据两部分构成的。

头部:包的开头包含目的地址等控制信息,称为头部

数据:包装载的数据,也是包的内容

20.节点的概念

终端节点:把发送方和接收方统称为终端节点

转发节点(中间节点):转发设备

21.IP模块

IP模块负责添加两个头部:1)MAC头部:以太网用头部,包含MAC地址

                                        2)IP头部:IP用的头部,包含IP地址

无论要收发的包是控制包还是数据包,IP对各种类型的包的收发操作都是相同的。