zoukankan      html  css  js  c++  java
  • TCP/IP的知识梳理(按四层结构体系描述)

    TCP/IP协议

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。

    TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

    TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

    OSI参考模型与TCP/IP四层模型对比

     

      一、应用层协议

    该层存在的协议:HTTP,DNS,FTP,Telnet,SMTP,RIP,NFS

    HTTP协议:(后面专门用一篇文章详解HTTP和HTTPS)

    HTTP (HyperText Transfer Protocol 超文本传输协议) 基于 TCP,使用端口号 80 或 8080。

    每当你在浏览器里输入一个网址或点击一个链接时,浏览器就通过 HTTP 协议将网页信息从服务器提取再显示出来,这是现在使用频率最大的应用层协议。

    这个原理很简单:

    • 点击一个链接后,浏览器向服务器发起 TCP 连接;

    • 连接建立后浏览器发送 HTTP 请求报文,然后服务器回复响应报文;

    • 浏览器将收到的响应报文内容显示在网页上;

    • 报文收发结束,关闭 TCP 连接。

    HTTP 报文会被传输层封装为 TCP 报文段,然后再被 IP 层封装为 IP 数据报。HTTP 报文的结构:

    可见报文分为 3 部分:

    • (1)开始行:用于区分是请求报文还是响应报文,请求报文中开始行叫做请求行,而响应报文中,开始行叫做状态行。在开始行的三个字段之间都用空格分开,结尾处 CRLF 表示回车和换行。

    • (2)首部行:用于说明浏览器、服务器或报文主体的一些信息。

    • (3)实体主体:请求报文中通常不用实体主体。

    请求报文的方法字段是对所请求对象进行的操作,而响应报文的状态码是一个 3 位数字,分为 5 类 33 种:

    • 1xx 表示通知信息,如收到或正在处理。

    • 2xx 表示成功接收。

    • 3xx 表示重定向。

    • 4xx 表示客户的差错,如 404 表示网页未找到。

    • 5xx表示服务器的差错,如常见的 502 Bad Gateway。

    DNS协议:

    DNS协议基于UDP,使用端口53,由数字组成的IP地址很难记忆,所以我们上网使用网站IP地址的别名--域名,实际使用中,域名与IP地址是对应的,

    这种对应关系保存在DNS服务器中,在浏览器输入一个域名后,会有DNS服务器将域名解析为对应的IP地址。

    DNS 服务器是个分层次的系统:

    • (1)根 DNS 服务器 :全世界共有 13 台根域名服务器,编号 A 到 M,其中大部分位于美国。

    • (2)顶级(TLD)DNS 服务器 :负责如 com 、org 、edu 等顶级域名和所有国家的顶级域名(如 cn 、uk 、jp )。

    • (3)权威 DNS 服务器 :大型组织、大学、企业的域名解析服务。

    • (4)本地 DNS 服务器 :通常与我们主机最近的 DNS 服务器。

    而域名解析的过程,有迭代查询和递归查询两种方式:迭代查询和递归查询

    主机向 DNS 服务器发出的查询叫做DNS 报文,大致结构:

    DNS 缓存和 hosts 文件

    刚才 DNS 解析查询过程的图中,共发出了 8 份 DNS 报文,这是非常消耗时间的,所以实际应用上使用 DNS 缓存 :当一个 DNS 服务器接收到一个 DNS 回答后,

    会将其信息缓存一段时间,当再有一个对相同域名的查询时,便可直接回复。

    通过 DNS 缓存,其实很多查询都只需要本地 DNS 服务器便可完成。

    有“翻墙”爱好的同学应该知道 hosts 文件,其实 hosts 文件可以看作是一个小型的 DNS 服务器。

    使用命令打开 hosts 文件:

    sudo gedit /etc/hosts
    

    查看文件内容,可以发现里面全是类似下图中的 IP 和域名对应记录:

    在实际上网过程中,域名解析的的优先顺序是:先在 DNS 缓存查询,若没有找到记录,再查询 hosts 文件,若还是没找到记录,再向 DNS 服务器发出 DNS 查询报文。

    FTP协议:

    FTP (File Transfer Protocol 文件传输协议) 基于 TCP,使用端口号 20(数据)和 21(控制)。

    它的主要功能是减少或消除在不同操作系统下处理文件的不兼容性,以达到便捷高效的文件传输效果。

    • FTP 只提供文件传输的基本服务,它采用 客户端—服务器 的方式,一个 FTP 服务器可同时为多个客户端提供服务。

    • 在进行文件传输时,FTP 的客户端和服务器之间会建立两个 TCP 连接:21 号端口建立控制连接,20 号端口建立数据连接。

    • FTP 的传输有两种方式:ASCII 传输模式和二进制数据传输模式。

      二、传输层协议

    该层的协议主要是:传输控制协议(TCP)和用户数据包协议(UDP)

    TCP是一个可靠面向连接的协议。

    UDP是不可靠的或非连接的协议。

    面向连接和非连接的通信方式的区别:
      就像打电话和寄明信片一样。打电话的双方在正式通话之前都会说“喂”,确定对方在线以后才开始通话,会话结束时都要说“再见”,然后才挂下电话。而寄明信片却没有这种机制,寄出去了但不管对方是否收到。
     
    端口号:
      每个应用程序都会产生自己的数据流,这些数据流可以把目标主机上相应的服务程序看作自己的目的地,对于传输层来说,它只需要知道目标主机上的哪个服务程序来响应这应用程序,而不需要知道这个服务程序具体是干什么的。因此,传输层使用一个抽象的端口号来标识这些应用程序和服务程序。
     
    端口号的功能及应用特点:
      端口号用来跟踪网络间同时发生的不同会话。TCP和UDP可以同时接收多个应用程序送来的数据流,用端口号来区分他们,然后送给适当的应用程序处理。这时多路分解技术的体现,它可以确保正确的用户程序收到正确的数据。因此,每个应用程序发送数据前都会与操作系统进行协商,获得响应的源端口号和目标端口号。
     
    TCP协议段格式

    16位的源端口号:标示该进程自己
    16位目的端口号:标示我要向哪个进程发送数据
    32位的序列号/32位确认序列号:为了满足全双工的安全机制而存在的,它有以下四个功能:

           a.保证基本的可靠性
      b.是数据可以按序到达
      c.支持超时重传
      d.高效

    4位的首部长度:表示该TCP头部有多少个32位bit,即就是有多少个4字节,TCP头部最大长度15*4=60;
    6位的保留位:以备不时之需
    6位的标志位:这个就需要详细来说说,因为这个是TCP协议段中最不好记忆的地方


    URG:紧急指针标志位,紧急指针是否有效
    ACK:确认号标志位,确认号是否有效,一般只有第一个报文才会无效,在正常通信期间,其必须有效。
    PSH:推送标志位,催促接收端把接收缓冲区的数据赶紧处理了
    RST:重置标志位,请求重新建立连接
    SYN:同步标志位,请求建立连接
    FIN:结束标志位,通知对方,我要断开连接了


    16位的窗口大小:标示我还能接收多少数据,里面填写的也就是我的接收缓冲区的大小
    16位的检验和:由发送端填充,CRC校验,若接收端校验不通过就说明数据有问题,此处校验和包括TCP整体(TCP首部和数据)
    16位的紧急指针:标示那部分的数据是紧急数据,需要优先处理
    40位的选项:这个就有点多了,在这里就不做阐述。

    UDP协议段格式

    16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度
    即:一个UDP能传输的数据最大长度是64K
    如果我们要传输的数据大于64K,那么我们需要在应用层手动分包,多次发送,并在接收端手动拼装
    UDP没有发送缓冲区,应用层发送数据,由内核传给网络层协议进行后续额传输动作。
    UDP有接受缓存区,但是接受缓存区不能保证和发送的的数据顺序一致,如果接受区缓存满了,再到达的UDP数据被丢弃

    不可靠
    无连接
    面向数据报

    TCP的三次握手和四次挥手,简单描述,具体见另一篇文章详细讲。

       三、网络层协议

    网络层的功能:负责相邻计算机之间的通信。其功能包括三方面:

      一、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。

      二、处理输入数据报:首先检查其合法性,然后进行寻径——假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。

      三、处理路径、流控、拥塞等问题。

    网络层包括:IP(Internet protocol)协议、ICMP(Internet Control Message Protocol)控制报文协议、ARP(Address resolution protocol)地址转换协议、RARP(Reverse arp)反向地址转换协议。

    IP是网络层的核心,通过路由选择将下一跳IP封装后交给接口层。IP数据报是无连接服务。

    ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。

    ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。

    RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站和DHCP服务。

    ARP协议为IP协议提供服务,IP协议为ICMP协议提供服务,ICMP协议为IGMP协议提供服务。

    ARP协议:将IP地址通过广播,目标Mac地址是FF-FF-FF…解析目标IP地址的Mac地址。(局域网中)通过arp -a可以查看Mac地址。

    网络执法官软件通过动态更改主机Mac地址,实现arp欺骗,使两台主机不能通讯

    arp -s ip地址 Mac地址 静态绑定Mac地址,可以阻止arp欺骗,点本地连接,支

    持,修复,可以清除静态Mac地址。

      四、物理链路层协议

  • 相关阅读:
    Spring框架(一)-----核心理解
    vi常用编辑
    Avue使用renren-fast-vue开源脚手架工程(一)
    sqlServer触发器调用JavaWeb接口
    Linux常用别名设置
    油猴+IDM不限速下载
    Nginx配置静态web项目
    消息中间件rabbitMQ
    springboot自定义starter
    Nginx配置微信小程序 文件验证
  • 原文地址:https://www.cnblogs.com/xiaoqingSister/p/12538481.html
Copyright © 2011-2022 走看看