zoukankan      html  css  js  c++  java
  • TCP/IP网络基础

    网络基础TCP/IP

    什么是协议?

    计算机和网络设备要相互通信,双方就必须约定标准的通信规则,例如由哪一端担任通信发起方、使用何种语言进行通信、如何结束通信等规则都需要事先进行确定。我们通常把这些规则称为协议

    什么是TCP/IP?

    TCP/IP是互联网相关的各类协议族(集合)的总称。

    image-20210622145341580

    TCP/IP的分层思想

    如果互联网只由一个巨大的协议统筹,那么当某个地方需要改变设计时,需要对协议中所有部分进行整体替换。分层之后,由于层间的接口都已经设计好了,因此只需要对要改动部分所在层进行内部的设计调整即可。同时,层次化也使得层功能固定,每个网络层各司其职,协同工作,完成网络通信。

    TCP/IP协议族按照层次分别可以分成如下4层:

    • 应用层 —— 决定了向用户提供服务时的通信活动(FTP、DNS、HTTP)
    • 传输层 —— 为应用层提供处于网络连接中的两台计算机之间的数据传输(TCP、UDP)
    • 网络层 —— 处理在网络中流动的数据包(网络传输的最小单位),该层规定了通过何种路径将数据包传输给对方(IPv4、IPv6)
    • 数据链路层 —— 处理连接网络的硬件部分

    TCP/IP通信传输流

    以HTTP举例说明,浏览器(客户端)在应用层发出一个HTTP请求(请求html页面),应用层将HTTP请求报文向下移交传输层,为了传输方便,传输层对收到的HTTP请求报文进行了分割,并增加一个TCP首部(主要包括报文标记序号+源、目端口号),封装好后移交网络层,网络层进行路由查找,添加上IP首部(主要包括报文标识以及源目IP地址),封装好后移交数据链路层。然后数据通过数据链路层进行物理传输。接收端的服务器在链路层接收到数据后,按序向上层发送,直到将数据传输到接收端的应用层,才算真正接收到了客户端发过来的HTTP请求。

    image-20210622150952266

    HTTP协议

    HTTP协议是对客户端和服务器端之间实现可靠性的传输文字、图片、音频、视频等超文本数据的规范,格式简称为“超文本传输协议”。两台计算机之间使用HTTP协议进行通信时,在一条通信线路上必定有一端是客户端,另一端是服务端。HTTP协议通过请求和响应的交换达成通信。

    image-20210622153737971

    HTTP请求响应过程

    1. 浏览器访问URL(http://www.someschool.edu/someDepartment/home.index)
    2. DNS服务器将域名www.someschool.edu映射为真实的服务端IP地址
    3. HTTP客户端进程在80端口(默认)发起一个到服务器的TCP连接,在客户端和服务端进程中都会有一个Socket与其绑定。
    4. HTTP客户端通过Socket向服务器发送一个HTTP请求报文。在HTTP请求报文首部通过路径someDepartment/home.index指定了请求的资源。
    5. HTTP服务器通过它的Socket接受客户端发来的请求报文,并对请求进行解析,从存储器(RAM或磁盘)中检索出与请求的资源对象home.index相关的所有资源,然后将它封装到HTTP响应报文中,通过Socket发给客户端。
    6. HTTP服务器发送完响应报文后,客户端接受完响应报文后,断开TCP连接。
    7. HTTP客户端从响应报文中提取出HTML文件,并循环检查出报文中其他内部对象。
    8. 检查完成后,HTTP客户端把对应的请求资源通过浏览器进行视图解析,呈现给客户。

    HTTP协议和TCP/IP中其他协议的关系

    • DNS(Domain Name System) —— 提供域名到IP地址的双向解析
    • TCP —— 提供可靠(三次握手、四次挥手)的字节流服务(为了方便传输,将大块数据分割成报文段)
    • IP —— 通过路由转发(通过地址解析协议——ARP协议实现IP地址到MAC地址的转换)确保将各种数据包传送给对方。

    下图详细地阐述了使用HTTP协议进行通信的整个过程:

    image-20210622152400111

    参考资料

    《图解HTTP》 by 上野宣

  • 相关阅读:
    第六周 组合数据类型
    第五周 函数和代码复用
    第四周 程序的控制结构
    第三周 Python基本数据类型
    python库
    sublime text3自定义设置及快捷键大全
    Sublime Text3插件安装教程
    Linux 标准目录结构
    快学Scala-10--List 和Set
    快学Scala-09--模式匹配
  • 原文地址:https://www.cnblogs.com/caoyusang/p/14920008.html
Copyright © 2011-2022 走看看