TCP/IP协议模型

11 篇文章 1 订阅

下面先通过我的另外一篇文章了解一下
TCP/IP协议模型 和 OSI参考模型 的对比:
https://blog.csdn.net/qq_37941471/article/details/80459772

接下来我来从顶向下的介绍一下TCP/IP协议模型的四层:

应用层:


1. 功能:

这一层为用户的应用程序提供网络服务的。包括:文件传输,电子邮件,远程登录等
而怎么提供服务呢?
双方之间的协议,以某一种格式:比如邮件的格式
下面就有了一些应用层的协议:

2. 应用层的协议:
基于UDP的应用层协议 :

  1. NFS:网络文件系统

  2. TFTP:简单文件传输协议

  3. DHCP:动态主机配置协议

  4. BOOTP:启动协议(用于无盘设备启动)

  5. DNS:域名解析协议 

  当然也包括自己写的UDP程序中自定义的应用层协议。

基于TCP的应用层协议:

  1. HTTP : 超文本传输协议

  2. HTTPS :是加密版本的:超文本传输协议

  3. SSH :安全外壳协议 :是一个加密的远程登录协议

  4. Telnet :远程登录协议

  5. FTP :文件传输协议

  6. SMTP :简单邮件传输协议

当然也包括自己写的TCP程序中自定义的应用层协议。

首先我们先实现一个网络版的计算器:

实现一个网络版的计算器:


这是我的两位一篇文章,有详细的解释:
https://blog.csdn.net/qq_37941471/article/details/80788174

下面我们重点了解一下常用的 http 协议:

HTTP协议:


1. 认识URL:

其实就是我们俗称的“网址”:
这里写图片描述

2. HTTP协议格式 :

这里写图片描述

3. HTTP的方法:
方法说明支持的HTTP协议版本
GET获取资源1.0 / 1.1
POST传输实体主体1.0 / 1.1
PUT传输文件1.0 / 1.1
HEAD获得报文首部1.0 / 1.1
DELETE删除文件1.0 / 1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和连接的关系1.0
UNLINE断开连接关系1.0
4. HTTP—状态码及其描述:
状态码类别原因短语
1XXInformational ( 信息性状态码 )接收的请求正在处理
2XXSuccess ( 成功状态码 )请求正常处理完毕
3XXRedirection( 重定向状态码 )需要进行附加操作及完成请求
4XXClient Error( 客户端错误状态码 )服务器无法处理请求
5XXServer Error( 服务器错误码 )服务器处理请求出错
常见的状态码:
1. 2XX 成功
1. 200 : OK

   表示请求结果已经被正确处理了

2. 204 :NO Content

   表示请求结果已经被正确处理了, 但是响应信息中没有响应正文

3. 206 :Partial Content

   请求资源中的某一部分
2. 3XX 成功
1. 301 : Moved Permanently

   永久性重定向

2. 302 :Found

   临时性重定向

3. 307 :Partial Content

   临时重定向

三者之间的区别:

  1. 301 和 302标准禁止将POST方法改变成GET方法的,但是实际使用中大家并不会去遵守
  2. 307会遵守浏览器的标准:不会将POST方法改变成GET方法
3. 4XX 客户端错误
1. 400 : Bad Request

   请求报文中存在语法错误,需要修改请求内容重新发送

2. 403 :Forbidden

   所请求的资源被服务器拒绝了,服务器没有必要给出详细的解释。

3. 404 :Not Found

   服务器中没有客户端请求的资源
3. 5XX 服务器端错误
1. 500 : Internal Server Error

   表示服务器端在执行的时候出现了错误,可能是web本身存在的bug或者临时故障

2. 503Server Unavailable

   表示服务器端目前处于超负载或者正在进行停机维护状态,目前无法请求资源

下面我们实现一个简单的http服务器:

5. 实现一个简单的http服务器:

下面先通过我的另外一篇文章了解一下:

http服务器是基于TCP协议实现的

https://blog.csdn.net/qq_37941471/article/details/80789725

传输层


1. 功能:
功能 : 负责数据能够从发送端发送到接受端

另外 :

对于上层 : 是为上层提供服务的

           而如何实现交付?
             1. 考虑怎么将有效载荷和报头分离 

                1. 上层的http协议是通过空行来当报头和数据的分隔符的
                2. 而这里,我们用定长来解决

              2. 有了数据,如何给上层,交给上层?
                  引出了端口号的概念

                  1. 端口号 :表示了某一个主机上进行通信的不同的应用程序
                  2. 而如何找到主机的? 网络层是用来找目标主机的
                     不过始终记得:
                       对于各层而言,每一层的通信每一层都认为是和对应层通信的 ;
                       只是下一层是为上一层提供服务的,想要通信,就是要找到  
                       1. 用目标地址的网络号找到主机所在的网络      
                       2. 找到所在的网络,再去找对应的主机
                          以及主机中对应的程序 (端口号标识)


2. 端口号的作用以及划分:
作用:
 有了数据,如何给上层,交给上层?

        引出了端口号的概念

           1. 端口号 :表示了某一个主机上进行通信的不同的应用程序
           2. 而如何找到主机的? 网络层是用来找目标主机的

               不过始终记得:

                       对于各层而言,每一层的通信每一层都认为是和对应层通信的;
                       只是下一层是为上一层提供服务的,想要通信,就是要找到  
                       1. 用目标地址的网络号找到主机所在的网络      
                       2. 找到所在的网络,再去找对应的主机
                          以及主机中对应的程序 (端口号标识)
划分:
逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:

一 :按端口号分布划分

  (1)知名端口(Well-Known Ports)

  知名端口即众所周知的端口号,范围从01023,这些端口号一般固定分配给一些服务。
  比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务, 
  80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。

  (2)动态端口(Dynamic Ports)

  动态端口的范围从102465535,这些端口号一般不固定分配给某个服务,
  也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请, 
  那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个 
  向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。

  不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626、WAY 2.4是 
  8011、Netspy 3.07306、YAI病毒是1024等等。

二 :按协议类型划分

  按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。 
  下面主要介绍TCP和UDP端口:

  (1)TCP端口

  TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接, 
  这样可以提供可靠的数据传输。常见的包括 :
    1. FTP服务的21端口
    2. Telnet服务的23端口
    3. SMTP服务的25端口
    4. HTTP服务的80端口
    5. HTTPS服务的443端口
    6. SSH服务的22端口

  (2)UDP端口

  UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。 
  常见的有 :
     1. DNS服务的53端口
     2. SNMP(简单网络管理协议)服务的161端口
     3. QQ使用的80004000端口等等。

我们自己写的程序使用端口时,应该避开这些知名的端口号

下面来介绍一下这一层的两个重要的协议:

3. UDP协议 和 TCP协议:

https://blog.csdn.net/qq_37941471/article/details/80888827

网络层


1. 功能:
在复杂的网络环境中找一个合适的路径。

另外,网络层具有将主机A上的数据发送到主机B这个能力,但是不是绝对的。

下面介绍一下网络层是如何找合适的路径的?路由选择
首先了解一下IP协议:

2. IP协议:

1. IP地址 :

1. 基本概念:

    1. 主机:配有IP地址,但是不进行路由

    2. 路由器:既配有IP地址,又会进行路由

    3. 节点: 是主机和路由器的统称

2. 路由选择:

    1. ip地址分为:网络号+主机号
        eg: 192.168.128.10     其中192.168.128是网络号,10是该网段的主机号

    2. 路由选择的过程:

         分为两步: 

           1. 用网络号找到目标网络(路由用的不是ip地址,而是网络号) 

           2. 用主机号找到主机
           (找到目标主机所在额局域网,再通过主机号来找到目标主机)
2. IP协议格式:

这里写图片描述

3. 网段的划分:
1. 网络号 :区分两个主机是否在一个局域网(网段)
2. 主机号 :标识同一个局域网中的不同主机(同一个局域网,网络号必须相同)

按照类别进行划分:

  1. A类地址: 0.0.0.0~127.255.255.255

  2. B类地址: 128.0.0.0~191.255.255.255 

  3. C类地址: 192.0.0.0~223.255.255.255 

  4. D类地址: 224.0.0.0~239.255.255.255 

  5. E类地址: 240.0.0.0~247.255255.255

这里写图片描述

然而在实际应用中,大多数组织都申请的是B类和C类比较多,那么其他的类地址会浪费,B类和C类的地址会不够用,所以为了解决这个问题,有了新的一种划分地址的方法,也是现在常用的一种方法:

CIDR的划分方案 :

   1. 引入了一个额外的子网掩码(subnet mask)来区分网络号和主机号
   2. 子网掩码是一个32位的正整数,通常用一串“0”来结尾
   3. 将IP地址与子网掩码进行按位与操作,得到的结果就是网络号
   4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

特殊的IP地址:

  1. 将IP地址中的主机地址全部设为0,就是网络号,表示这个局域网
  2. 将IP地址中的主机地址全部设为1,就称为了广播地址,
     用于给同一链路中相互连接的所有主机发送数据包(ARP协议中就用到了)
  3. 127.*的IP地址通常用于本机环回(loop back)测试,通常是127.0.0.1

这里写图片描述

4. IP地址数量的限制:

我们知道,IPv4是一个4字节32位的正整数,它所能表示的ip地址最多也就是2^32-1,大概也就是43亿左右。而TCP/IP协议规定,每一个主机都需要一个IP地址;而这个世界上所有的主机远远不少于43亿,如果每一个主机都会有自己的ip地址,ip地址是不够用的,为了解决这个问题,下面用这几种方法来解决这个问题:

CIDR:

CIDR(无类域间路由器选择),它消除了传统的A类,B类等地址以及划分子网的概念,因而在一定程度上解决了IP地址不够用的问题(提高了效率,减少了浪费, 但是IP地址的上限并没有改变

下面介绍一下具体的三种方式:

1. 动态分配IP地址:

1. 只给接入网络的主机分配ip地址
2. 这个ip地址是路由其分配的,因而同一个主机因为接入网络的不同,ip地址也会不同
3. 总结:一般来说,主机不上网,就没有ip地址,连上网后,ip地址是路由器动态分布的 
(这个地址就是私有地址),不是固定不变的,整个过程中,主机只有MAC地址是唯一不变的。

2. NAT技术:

 下面会仔细的讲:相关概念 私有IP地址和公网IP地址   

3. 将IPv4 改成 IPv6 :

1. IPv6不是IPv4的升级版,而是一个互不相干的协议
2. 当前大家用的都是IPv4这个互联网协议,IPv6协议是下一个要替换IPv4协议, 
   只是现在实现起来会比较困难
3. IPv4是一个4字节32位的正整数;而IPv6是128位的正整数;
   所以它所能表示的ip地址最多为2^128-1个

由IPv6的实现会比较困难,所以我们通过第一二种方式来解决ip地址不够用的问题。
下面来介绍一下 NAT技术:

私有IP地址和公网IP地址


记住下面几点:
1. 公网IP地址是不可能重复的(全球唯一的IP地址)
2. 私有IP地址可以重复(不过是在不同的局域网中)
3. 路由器有两个口:一个是WAN口,一个是LAN口;另外LAN口中所分配的IP地址一定是私有地址;而WAN口的地址不一定是公网地址,因为有可能这个路由器是公网中的一个局域网(下面会用图来介绍)
这里写图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值