精华内容
下载资源
问答
  • 常用三种网络协议

    万次阅读 2017-07-14 16:50:52
    网络协议(Protocol)是一特殊的软件,是计算机网络实现其...网络协议遍及OSI通信模型的各个层次,从我们非常熟悉的TCP/IP、HTTP、FTP协议,到OSPF、IGP等协议,上千之多。对于普通用户而言,不需要关心太多的底
    网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制。网络协议的本质是规则,即各种硬件和软件必须遵循的共同守则。网络协议并不是一套单独的软件,它融合于其他所有的软件系统中,因此可以说,协议在网络中无所不在。网络协议遍及OSI通信模型的各个层次,从我们非常熟悉的TCP/IP、HTTP、FTP协议,到OSPF、IGP等协议,有上千种之多。对于普通用户而言,不需要关心太多的底层通信协议,只需要了解其通信原理即可。在实际管理中,底层通信协议一般会自动工作,不需要人工干预。但是对于第三层以上的协议,就经常需要人工干预了,比如TCP/IP协议就需要人工配置它才能正常工作。

    常用的三个网络协议
    网络中不同的工作站,服务器之间能传输数据,源于协议的存在。随着网络的发展,不同
    的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用同
    一语言,不能带有方言。因而必须开发严格的标准定义主机之间的每个包中每个字中的每
    一位。这些标准来自于多个组织的努力,约定好通用的通信方式,即协议。这些都使通信
    更容易。
    已经开发了许多协议,但是只有少数被保留了下来。那些协议的淘汰有多中原因---设
    计不好、实现不好或缺乏支持。而那些保留下来的协议经历了时间的考验并成为有效的通
    信方法。当今局域网中最常见的三个协议是MICROSOFT的NETBEUI、NOVELL的IPX/SPX和交叉
    平台TCP/IP。

    一:NETBEUI
    NETBEUI是为IBM开发的非路由协议,用于携带NETBIOS通信。NETBEUI缺乏路由和网络
    层寻址功能,既是其最大的优点,也是其最大的缺点。因为它不需要附加的网络地址和网
    络层头尾,所以很快并很有效且适用于只有单个网络或整个环境都桥接起来的小工作组环
    境。
    因为不支持路由,所以NETBEUI永远不会成为企业网络的主要协议。NETBEUI帧中唯一
    的地址是数据链路层媒体访问控制(MAC)地址,该地址标识了网卡但没有标识网络。路由
    器靠网络地址将帧转发到最终目的地,而NETBEUI帧完全缺乏该信息。
    网桥负责按照数据链路层地址在网络之间转发通信,但是有很多缺点。因为所有的广
    播通信都必须转发到每个网络中,所以网桥的扩展性不好。NETBEUI特别包括了广播通信的
    记数并依赖它解决命名冲突。一般而言,桥接NETBEUI网络很少超过100台主机。
    近年来依赖于第二层交换器的网络变得更为普遍。完全的转换环境降低了网络的利用
    率,尽管广播仍然转发到网络中的每台主机。事实上,联合使用100-BASE-T Ethernet,允
    许转换NetBIOS网络扩展到350台主机,才能避免广播通信成为严重的问题。

    二:IPX/SPX
    IPX是NOVELL用于NETWARE客户端/服务器的协议群组,避免了NETBEUI的弱点。但是,
    带来了新的不同弱点。
    IPX具有完全的路由能力,可用于大型企业网。它包括32位网络地址,在单个环境中允
    许有许多路由网络。
    IPX的可扩展性受到其高层广播通信和高开销的限制。服务广告协议(Service Adver
    tising Protocol,SAP)将路由网络中的主机数限制为几千。尽管SAP的局限性已经被智能路
    由器和服务器配置所克服,但是,大规模IPX网络的管理员仍是非常困难的工作。

    三:TCP/IP

    每种网络协议都有自己的优点,但是只有TCP/IP允许与Internet完全的连接。TCP/IP
    是在60年代由麻省理工学院和一些商业组织为美国国防部开发的,即便遭到核攻击而破坏
    了大部分网络,TCP/IP仍然能够维持有效的通信。ARPANET就是由基于协议开发的,并发展
    成为作为科学家和工程师交流媒体的Internet。
    TCP/IP同时具备了可扩展性和可靠性的需求。不幸的是牺牲了速度和效率(可是:TCP
    /IP的开发受到了政府的资助)。
    Internet公用化以后,人们开始发现全球网的强大功能。Internet的普遍性是TCP/IP
    至今仍然使用的原因。常常在没有意识到的情况下,用户就在自己的PC上安装了TCP/IP栈
    ,从而使该网络协议在全球应用最广。
    TCP/IP的32位寻址功能方案不足以支持即将加入Internet的主机和网络数。因而可能
    代替当前实现的标准是IPv6


    另一种解释:

    网络中不同的工作站,服务器之间能传输数据,源于协议的存在。随着网络的发展,不同的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言。因而必须开发严格的标准定义主机之间的每个包中每个字中

    网络中不同的工作站,服务器之间能传输数据,源于协议的存在。随着网络的发展,不同的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言。因而必须开发严格的标准定义主机之间的每个包中每个字中的每一位。

    这些标准来自于多个组织的努力,约定好通用的通信方式,即协议。这些都使通信更容易。

    已经开发了许多协议,但是只有少数被保留了下来。那些协议的淘汰有多中原因---设计不好、实现不好或缺乏支持。而那些保留下来的协议经历了时间的考验并成为有效的通信方法。当今局域网中最常见的三个协议是MICROSOFT的NETBEUI、NOVELL的IPX/SPX和交叉平台TCP/IP。

    一、NETBEUI

    NETBEUI是为IBM开发的非路由协议,用于携带NETBIOS通信。NETBEUI缺乏路由和网络层寻址功能,既是其最大的优点,也是其最大的缺点。因为它不需要附加的网络地址和网络层头尾,所以很快并很有效且适用于只有单个网络或整个环境都桥接起来的小工作组环境。

    因为不支持路由,所以NETBEUI永远不会成为企业网络的主要协议。NETBEUI帧中唯一的地址是数据链路层媒体访问控制(MAC)地址,该地址标识了网卡但没有标识网络。路由器靠网络地址将帧转发到最终目的地,而NETBEUI帧完全缺乏该信息。

    网桥负责按照数据链路层地址在网络之间转发通信,但是有很多缺点。因为所有的广播通信都必须转发到每个网络中,所以网桥的扩展性不好。NETBEUI特别包括了广播通信的记数并依赖它解决命名冲突。一般而言,桥接NETBEUI网络很少超过100台主机。

    近年来依赖于第二层交换器的网络变得更为普遍。完全的转换环境降低了网络的利用率,尽管广播仍然转发到网络中的每台主机。事实上,联合使用100-BASE-T Ethernet,允许转换NetBIOS网络扩展到350台主机,才能避免广播通信成为严重的问题。

    二、IPX/SPX

    IPX是NOVELL用于NETWARE客户端/服务器的协议群组,避免了NETBEUI的弱点。但是,IPX具有完全的路由能力,可用于大型企业网。它允许有许多路由网络。包括32位网络地址,在单个环境中带来了新的不同弱点。

    IPX的可扩展性受到其高层广播通信和高开销的限制。服务广告协议(ServiceAdvertising Protocol,SAP)将路由网络中的主机数限制为几千。尽管SAP的局限性已经被智能路由器和服务器配置所克服,但是,大规模IPX网络的管理员仍是非常困难的工作。

    三、TCP/IP

    每种网络协议都有自己的优点,但是只有TCP/IP允许与Internet完全的连接。TCP/IP是在60年代由麻省理工学院和一些商业组织为美国国防部开发的,即便遭到核攻击而破坏了大部分网络,TCP/IP仍然能够维持有效的通信。ARPANET就是由基于协议开发的,并发展成为作为科学家和工程师交流媒体的Internet。

    TCP/IP同时具备了可扩展性和可靠性的需求。不幸的是牺牲了速度和效率(可是:TCP/IP的开发受到了政府的资助)。

    Internet公用化以后,人们开始发现全球网的强大功能。Internet的普遍性是TCP/IP至今仍然使用的原因。常常在没有意识到的情况下,用户就在自己的PC上安装了TCP/IP栈,从而使该网络协议在全球应用最广。

    TCP/IP的32位寻址功能方案不足以支持即将加入Internet的主机和网络数。因而可能代替当前实现的标准是IPv6。














    展开全文
  • 本文主要介绍了局域网中最常用三种网络协议。网络中不同的工作站,服务器之间能传输数据,源于协议的存在。随着网络的发展,不同的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用...
  • 常见网络协议汇总

    千次阅读 多人点赞 2021-08-06 15:03:27
    常用网络协议前言TCP/IP五层网络模型回顾应用层协议DNS协议:HTTP协议HTTPS协议传输层协议UDP协议TCP网络层IP协议ICMP协议数据链路层ARP协议物理层整体的网络传输流程 前言 本篇博客将对基于 TCP/IP的五层网络模型 ...

    前言

    本篇博客将对基于 计算机网络五层模型 中的常见协议做以总结 ,目的通过这些具体的协议更深刻的认识整体网络的传输流程及相关网络原理

    计算机网络五层模型回顾

    在这里插入图片描述

    • 应用层:为用户为用户的应用进程提供网络通信服务
      协议——DNS协议、HTTP协议、HTTPS协议
    • 传输层:负责两台主机之间的数据传输,将数据从发送端传输到接收端
      协议——TCP协议、UDP协议
    • 网络层:负责传输的地址管理和路由选择,在众多复杂的网络环境中确定一条合适的路径
      协议——IP协议
    • 数据链路层:负责设备之间数据帧的传送和识别,将网络层传递的数据报封装成帧,在处于同一个数据数据链路节点的两个设备之间传输
      协议——ARP协议、MTU协议
    • 物理层:负责光电信号的传递方式,实现相邻计算机节点之间比特流的透明传输

    对于五层网络模型基本都是耳熟能详,但是有没有思考过,网络为什么要这样分层呢?

    最直接的回答就是为了简化网络设计的复杂性,通信协议采用分层结构,各层之间既相互独立又相互协调工作,如此以来便达到的高效的目的。如同设计模式中对于设计一个复杂的程序时,尽量使程序各功能之间是解耦合的一样,对于复杂的网络设计,分层设计也是很明智的一种做法。

    网络分层的最本质就是每一层独立的完成一个任务而不必考虑自己任务之外的实现,而因为不同的任务因此就有了每一层所对应的不同设备。(实例到应用就是,物理层只需要关系0和1的光电信号如何传输,而对它所表达的内容毫不关心;再往上数据链路层只需要关心封装好的数据帧如何准确的送到对应的MAC地址的目的主机中,而不必关心数据报的具体内容和具体会通过何种方式光纤还是局域网…同理往上对于所有层)

    应用层协议

    应用层协议主要负责各个程序间的通信,发生网络传输一个数据时,先由应用层对数据按照对应的协议封装,然后交给下一层传输层,当经过一系列网络传输,数据达到接收端时,一层层的分用,最后一层再由应用层分用,最终得到数据。

    DNS协议:

    DNS协议是一个应用层协议,建立在TCP和UDP的基础之上,使用默认端口为53,其默认通过UDP协议通信,但如果报文过大是则会切换成TCP协议。

    域名系统 (DNS) 的作用是将人类可读的域名 (如,www.baidu.com) 转换为机器可读的 IP 地址 (如,192.0.2.44),本质是通过DNS域名和IP地址的对应关系转换,而这种对应关系则保存在DNS服务器中

    域名的解析过程:

    域名的解析工作大体上可以分为两个步骤:第一步客户端向本地DNS服务器发起一个DNS请求报文,报文里携带需要查询的域名,第二步本地DNS服务器向本机回应一个DNS响应报文,报文里携带查询域名所对应的IP地址

    具体流程如下:

    1. 在本地缓存中查询,如果有则返回对应IP,如果没有将请求发给DNS服务器
    2. 当本地DNS服务器接收到查询后,先在服务器管理区域记录中查询,若没有再在服务器本地缓存中查询,如果没有将请求发送到根域名服务器
    3. 根域名服务器负责解析请求的根域部分,然后将包含下一级域名信息的DNS服务地址返回给本地DNS服务器
    4. 本地DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域的DNS服务器地址
    5. 按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应的IP地址信息
    6. 本地DNS服务器将最终查询到的IP返回给客户端,让客户端访问对应主机

    HTTP协议

    HTTP协议是一个简单的请求——响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
    同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。

    HTTP是基于TCP协议,且面向连接的。典型的HTTP事务处理有如下的过程:

    1. 客户端与服务器建立连接;
    2. 客户端向服务器提出请求;
    3. 服务器接受请求,并根据请求返回相应的数据作为应答响应;
    4. 客户端与服务器关闭连接。

    HTTP协议报文格式
    HTTP报文由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Respone)构成

    请求由请求行,请求头,请求体组成
    请求行中包含请求方法、路径、版本号,请求头为多个key-value数据,请求正文包含一些请求的数据
    响应由响应行,响应头,响应体组成
    响应行中包含状态码,状态码描述,版本号,响应头为多个key-value数据,响应正文包含一些响应的数据
    在这里插入图片描述
    常见HTTP响应状态码汇总

    200 OK :客户端请求成功

    3XX系列

    301 Moved Permanently :请求的资源以被永久的移动到新URL中,返回的Response中包含一个Location,浏览器会自动重定向到新URL,以后请求都会被新的URL替代
    302 Found :与301类似,但请求的资源只是临时的被移动到新的URL中,下次请求客户端继续使用原URL
    307 Temporary Redirect : 临时重定向,类似于302,使用GET请求重定向

    4XX系列

    400 Bad Request : 客户端请求语法错误,服务器无法理解(在 ajax 请求后台数据时比较常见)
    401 Unauthorized :请求要求用户的身份认证
    403 Forbidden : 服务器理解客户端请求,但是拒绝执行(一般用于用户级别为达到要求等等不支持访问)
    404 Not Found : 服务器无法根据客户端请求找到对应资源
    405 Method Not Allowed : 服务器不支持该方法

    5XX系列

    500 Internal Server Error : 服务器内部错误,无法完成请求
    503 Service Unavailable :由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

    HTTP协议的特点

    1. 支持服务器/客户端模式
    2. 传输较快速,客户端向服务器发送请求,只需要传输请求方法和路径
    3. 灵活,HTTP允许传输任意类型的数据对象
    4. 无连接,每次连接只能处理一个请求,服务器处理完客户端请求,客户端收到响应后就断开连接
    5. 无状态,协议本身对事务处理没有记忆能力,如果后序连接需要之前发送的信息时就需要重传

    HTTP1.0和HTTP1.1和HTTP2.0的区别:

    HTTP1.0和HTTP1.1的区别:

    1. 长连接:HTTP1.0只支持浏览器与服务器的短连接,即每次请求都要重新建立连接,服务器无法记录每个历史请求,HTTP1.1支持长连接即在一次连接下,浏览器可以向服务器发送多次请求
    2. 增加Host字段:HTTP1.0中认为每个服务器都绑定这唯一一个IP,所有发送的请求头URL中没有host信息,而HTTP1.1在请求和响应中都支持了host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
    3. 缓存:HTTP1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
    4. 错误提示:HTTP1.0中定义了16个状态码,对错误或警告的提示不够具体。HTTP1.1引入了一个Warning头域,增加对错误或警告信息的描述,并且还新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

    HTTP1.X和HTTP2.0的区别

    1. 增加二进制格式解析:HTTP1.X解析基于文本,而文本格式本身就具有多样性,很多场景下不方便,而引入二进制后,只有0和1组合,使解析更加方便也增强了健壮性
    2. 多路复用:即每个request都是是用作连接共享机制的,每个request都对应一个id,使一个连接可以有多个请求,再根据id将request归属到不同的服务端请求里
    3. header压缩:HTTP1.X中,每次传输都要写点header头,占用了大量数据,因此HTTP2.0在客户端和服务端各保存了一份header fields表,每次传输时只需传输header的更新信息,将header fields表更新即可实现header传输
    4. 服务端推送:HTTP2.0也添加了server push功能

    HTTPS协议

    HTTPS同样作为应用层协议,可以说它是HTTP的升级版,增加了传输数据的安全性,HTTPS协议是在HTTP的基础上增加了一个SSL外壳,HTTPS运行在SSL上,SSL运行在TCP上,对数据的加密工作就是在SSL上完成的
    在这里插入图片描述

    其保证安全性的做法是通过证书验证和对信息混合加密的方式
    混合加密技术:

    混合加密技术:结合对称加密与非对称加密
    服务端生成私钥,再通过私钥生成公钥,然后将公钥放在证书中颁发给客户端
    使用公钥和私钥以非对称方式加密生成密钥
    客户端接下来的传输数据中,都会用密钥以对称方式对信息加密,再传输给服务端

    在这里插入图片描述

    对于,上述提到的公钥和私钥,我们规定用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开

    所以HTTPS传输数据是用被密钥加密的密文和用公钥加密的私钥来保证数据安全的

    HTTPS加密,只用对称加密可以吗?
    不行!无法保证安全性,因为只用对称加密即只用密钥对数据加密传输的话,如果传输途中,信息被第三方劫持,获取到密钥,那接下来的传输,第三方都可以通过密钥对数据解密从而得到原始数据。

    HTTPS加密,只用非对称加密可以吗?两次呢?
    同样不行,如果只用非对称加密。客户端每次传输数据用公钥加密,服务端再用私钥解密这一方向看似安全,但当服务端发送数据用私钥加密,客户端收到用公钥解密时,第三方劫持到信息,但可能在此之前就获得公钥,因为首次服务端向客户端发送公钥是明文传输的。
    而换个角度如果使用两次非对称加密,即两组公钥,两组私钥,客户端服务端各持一组,理论上可以达到安全,但实际HTTPS并未采用,因为非对称加密耗时十分大

    证书:

    单有混合加密技术,看似已经保证了传输的安全性,实则还是有漏洞,问题就在于服务器根本无法识别发送过来的公钥是否是自己的,如此以来在第三方劫持到数据后,自行再定义一个公钥B,并将公钥B传回给客服端,此时客户端就会利用该公钥B重新加密数据然后发送,此时第三方就可以通过自己的公钥B解密得到原始数据了。

    证书就解决了这一问题,指定颁发的为CA机构,当网站使用HTTPS时,会向CA机构申请一个数字证书,证书中可以存放公钥、数据等信息,由此以来,服务端就可以通过证书来向客户端证明正确的公钥是哪一个,以此保证安全。
    而对于证书,还有一些自己的放篡改机制,防止第三方获取到使用
    在这里插入图片描述

    传输层协议

    传输层的主要功能是为了实现“端口到端口”的通信,以确保一条数据发送到主机上后,能够正确的传递到对应的端口上

    UDP协议

    UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,但是UDP也有自己的缺陷,一旦进行通信,就不知道对方是否接收到数据了,很有可能会造成传输数据的丢包问题

    在这里插入图片描述
    特点:

    • 无连接:只需要知道目的ip和端口号就可以发送数据,无需建立连接
    • 不可靠:没有一系列机制来应对传输数据时的丢包问题
    • 面向数据报发送:应用层交给UDP什么样的报文,UDP就会发送什么样的,不会进行拆分,合并
    • UDP一次传输的数据大小有限,最大64k

    UDP的传输流程
    在这里插入图片描述
    UDP的适用范围:

    由于UDP不属于连接型协议,所以具有资源消耗小。处理速度优的特点,因此经常使用与视频、音频通话传输中,因为发送的数据较多,偶尔丢包一两个不会产生太大影响

    TCP

    因为上述讲到UDP的传输是不可靠的,经常会导致连接错误、数据丢包问题,针对这些问题规定了另一个传输层协议——TCP协议,TCP是一种面向连接、可靠的、基于字节流的传输层协议

    在这里插入图片描述

    TCP的特点:

    • 面向连接:在传输数据是,要先建立起客户端与服务端的连接,才能进行数据传输
    • 可靠的通信:TCP输出数据中,会基于内部的各种机制保证数据传输到目的端口
    • 基于字节流:TCP传输数据是基于字节传输的,易于对数据的拆分与合并发送
    • TCP的头部比UDP的开销要打,因为要存放更多的信息

    关于TCP内部各种机制,在这里不做过多的介绍,需要博友可以参考之前的一篇博客网络原理基础

    TCP与UDP的区别:

    • UDP是无连接的,TCP是有连接的
    • UDP是不可靠的,TCP是可靠的
    • UDP面向数据报,TCP面向字节流
    • UDP比TCP的传输消耗小,速度更快

    这里分享一张神图,以便于更加形象的理解TCP和UDP的区别
    在这里插入图片描述

    网络层

    网络层是基于数据链路层和传输层之间的第三层协议,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向传输层提供最基本的端到端的数据传送服务

    网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。

    IP协议

    IP协议是TCP/IP网络模型中的核心部分,他提供了一种分层的、无关硬件的寻址方式,可以在复杂的路由式网络中传递数据所需的服务

    IP协议可以将多个交换网络连接起来,在源地址和目的地址之间传输数据包,同时它还能提供数据的组装功能,以适应不同网络对数据包大小的要求

    预研知识:

    IP地址:
    IP地址是互联网协议特有的一种地址,它是IP协议提供的一种统一的地址格式,IP地址为互联网的每个网络和每台主机分配了一个逻辑地址,以此来屏蔽物理地址的差异

    IP地址的格式:
    IP地址为32位地址,被分为4个部分,如XXX.XXX.XXX.XXX,IP地址又被划分为两个部分
    网络号:前三部分用于标识网段,保证相互连接的两个网段有不同标识
    主机号:由最后一部分组成,用于标识主机,保证处于同一网段的两台主机有不同的主机号
    通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同4

    MAC地址:
    被称为物理地址,是用来标识网络中每个设备的,MAC地址是设备出厂之后就写死的

    引入IP地址的目的:
    在单个局域网网段中,计算机与计算机之间可以使用数据链路层提供的MAC地址进行通信
    如果在路由式网络中,计算机之间就不能用MAC地址实现通信,主要是因为在路由式网络中,数据只是经过一次简单的利用两个计算机之间的MAC地址建立通信,而是需要进行多次的通信,每次跳转都会体目的主机更近一步,经历都次跳转,最终找到目的主机实现通信,而这个过程中,要知道每次向哪跳转才能更接近目的主机,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址

    IP协议数据报格式这里是引用

    IP协议的工作方式:

    由于网络分为同网段和不同网段,所以会分成两种方式

    • 同网段:如果源地址主机和目的地址主机处于同一网段,则目的IP地址被 ARP协议 解析为MAC地址后,源主机会根据目的MAC地址直接将数据包发送给目的主机
    • 不同网段:
      如果源地址主机和目的地址主机不处于同一网段,则数据包会经历多个过程最终发送给目的主机
      1、网关(一般为路由器)的 IP地址 被 ARP协议 解析为 MAC地址,根据该 MAC地址 源主机会将数据包发送到网关
      2、网关根据数据包中的网段ID找到目标网络,如果找到,将数据包发送给目标网路,如果没有则重复第一步发送到更高一级网关
      3、数据包经过网关发送到正确的网段后,目标IP被 ARP协议 解析为MAC地址,在根据该 MAC地址 将数据包发送给目标地址的主机

    ICMP协议

    ICMP协议又叫控制报文协议,ICMP协议用于在IP 和 路由器之间传递控制消息,描述网络是否通畅、主机是否可达、路由器是否可用等网络状态,ICMP本身并不传输数据,但对于用户间数据的传递起着重要的作用

    作用:
    在数据包从源主机传输到目的主机的过程中,会经历一个或多个路由器,而数据包在经过这些路由器传输过程中,可能会遇到很多问题,最终导致数据包没有成功传递给目的主机。为了了解数据包在传输过程中在哪个环节出了问题,就需要用到ICMP协议,它可以跟踪数据包,并把消息返回给源主机。

    在这里插入图片描述

    数据链路层

    数据链路层是TCP/IP网络模型的第二层,基于物理层和网络层之间,数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层

    ARP协议

    ARP协议是数据进行网络传输过程中,通过IP地址向MAC地址的转换,解决网络层和物理层衔接问题

    引入ARP协议的目的:
    由于 IP 地址和 MAC 地址定位方式不同,ARP 协议成为数据传输的必备协议。主机发送信息前,必须通过 ARP 协议获取目标 IP 地址对应的 MAC 地址,才能正确地发送数据包。
    在这里插入图片描述
    ARP的工作流程:
    在这里插入图片描述
    在这里插入图片描述
    如图展示的是同一网段下的两台主机,ARP的工作流程

    • 主机A以广播的形式向该网段内的所有主机发送ARP请求,请求中包含了目的主机的IP地址
    • 主机B接收到请求,通过请求中的目的IP地址发现自己是主机A要找的,返回响应,响应包括主机B的 MAC地址

    ARP缓存:
    在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。

    为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。

    只要在这个时间范围内,下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。

    物理层

    物理层,顾名思义就是用物理手段将两个要通信的电脑连接起来,主要用来传输0、1光电信号,因为这一层过于偏硬件,所以本文不做过多的赘述

    整体的网络传输流程

    经过以上对网络传输层中每一层理解下面我们来看看,当访问一个网页时,到底发生了什么?

    主机A:发送http://www.baidu.com网络数据报

    1. DNS解析:将域名转换成对应IP地址(本机DNS缓存栈开始找—>逐级向上查找,如果根域服务器找不到,表示公网上没有该域名主机)
    2. 找到IP后:通过目的IP找到对应的目的MAC地址
    3. 根据目的IP计算目的主机是否和主机A处于同一网段
    4. 如在同网段:接通过ARP协议解析出对应的目的MAC,跳转到底9步
    5. 如不在同一网段:发送数据报到网关,现在ARP缓存表查找,通过网关IP查找MAC地址,找不到发送查询MAC广播数据报,最终返回网关自己的MAC
    6. 交换机转发:在MAC地址转换表中找到对应MAC交换机接口
    7. 路由器接收:分用数据报
      在这里插入图片描述
    8. 途中的设备:与第7步同样操作如目的IP对应的MAC地址不是当前设备则继续重复该操作继续往更接近目的IP的路由发送
      在这里插入图片描述
    9. 找到目的主机B,主机B的服务器开始接受分用请求,解析,最终组织响应
      在这里插入图片描述
    10. 同上述操作一样,由主机B向主机A发送数据
    11. 最终主机A接受到数据报,经过分用,解析,最终得到响应
    展开全文
  • 常见网络协议

    万次阅读 多人点赞 2019-03-26 13:32:50
    一、网络协议 二、TCP(Transmission Control Protocol,传输控制协议)       TCP头格式      TCP协议中的次握手和四次挥手      TCP报文抓取工具、...

    一、网络协议

    二、TCP(Transmission Control Protocol,传输控制协议)

          TCP头格式
          TCP协议中的三次握手和四次挥手
          TCP报文抓取工具
    三、HTTP(HyperText Transfer Protocol,超文本传输协议)

          请求报文结构
          请求报文样例
          请求报文参数详解
          响应报文结构
          响应报文样例
          响应报文参数详解
          HTTP报文抓取工具
          Session和Cookie
    四、相关资料

    ---------------------------------------------------------------------------------------------

    一、网络协议

           国际标准化组织(International Standard Organization,ISO)公布了开放系统互连参考模型(OSI/RM)。OSI/RM是一种分层的体系结构,参考模型共有7层。
    TCP/IP(Transmission Control Protocol/Internet Protocol)作为Internet的核心协议。它是个协议族,包含多种协议。
    分层的基本想法是每一层都在它的下层提供的服务基础上提供更高级的增值服务,而最高层提供能运行分布式应用程序的服务。

    发送请求的过程是从最顶层(应用层)出发,每一层负责封装属于自己的信息到请求中,最后将一整个请求发送给对方。
    接收请求的过程是从最底层(网络接口层)开始,每一层的协议负责解析属于自己的东西,比如网际层(IP)处理ip信息,传输层(TCP)处理点对点的端口,应用层(HTTP)处理Request或Response的Line\Header\Body。

     

    二、TCP(Transmission Control Protocol,传输控制协议)

          TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。
    TCP的特点有:

    • TCP是面向连接的运输层协议
    • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
    • TCP提供可靠交付的服务
    • TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
    • 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。

    1、TCP头格式

    (1)   Source Port(源端口号):数据发起者的端口号,16bit。
    (2)   Destination Port(目的端口号):数据接收者的端口号,16bit。
    (3)   Sequence Number(顺序号码,Seq):用于在数据通信中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。
    (4)   Acknowledgment Number(确认号码,ack):是数据接收方期望收到发送方在下一个报文段的顺序号码(Seq),因此确认号码应当是上次已成功收到顺序号码(Seq)加1,32bit。
    (5)   Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(2^3+2^2+2^1+1)*32bit=60bytes的报文头。最小取值5,5*32bit=20bytes。
    (6)   Reserved(保留):6bit, 均为0
    (7)   TCP Flags(TCP标志位)每个长度均为1bit
              CWR:压缩,TCP Flags值0x80。
              ECE:拥塞,0x40。
              URG:紧急,0x20。当URG=1时,表示报文段中有紧急数据,应尽快传送。
              ACK:确认,0x10。当ACK = 1时,代表这是一个确认的TCP包,取值0则不是确认包。
              PSH:推送,0x08。当发送端PSH=1时,接收端尽快的交付给应用进程。
              RST:复位,0x04。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
              SYN:同步,0x02。在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
              FIN:终止,0x01。当FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
    (8)   窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
    (9)   检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
    (10) 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
    (11) TCP选项:长度可变,最长可达40字节

    备注:ISN(Inital Sequence Number):初始化Sequence Number,发生在建立连接时。

    2、TCP协议中的三次握手和四次挥手

    三次握手可以理解成:

    我打电话给你你没看到,一会之后你又打电话给我问有什么事,我再给你说我有什么什么事

    四次挥手可以理解成:

    我给你说我不想再要你送的东西了,你说不行啊还有很多没有送完(继续在送),(送完啦)你说已经把所有东西都送给我啦,我说我收到了那就结束吧-----------

     

    特别注意

    Seq:是发送方当前报文的顺序号码。
    ack:是发送方期望对方在下次返回报文中给回的Seq。

    建立连接需要三次握手

    第一次握手:客户端向服务端发送连接请求包,标志位SYN(同步序号)置为1,顺序号码为X=0。

    第二次握手:服务端收到客户端发过来报文,由SYN=1知道客户端要求建立联机,则为这次连接分配资源。并向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始顺序号码Y=0,将确认序号(ack)设置为上一次客户端发送过来的顺序号(Seq)加1,即X+1 = 0+1=1。

    第三次握手:客户端收到服务端发来的包后检查确认号码(ack)是否正确,即第一次发送的Seq加1(X+1=1)。以及标志位ACK是否为1。若正确,服务端再次发送确认包,ACK标志位为1,SYN标志位为0。确认号码(ack)=Y+1=0+1=1,发送顺序号码(Seq)为X+1=1。Server收到后确认号码值与ACK=1则连接建立成功,可以传送数据了。

    断开连接需要四次挥手

    提醒:中断连接端可以是Client端,也可以是Server端。只要将下面两角色互换即可。
    第一次挥手:客户端给服务端发送FIN报文,用来关闭客户端到服务端的数据传送。将标志位FIN和ACK置为1,顺序号码为X=1,确认号码为Z=1。意思是说”我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK过来。”

    第二次挥手:服务端收到FIN后,发回一个ACK(标志位ACK=1),确认号码为收到的顺序号码加1,即X=X+1=2。顺序号码为收到的确认号码=Z。意思是说“你的FIN请求我收到了,但是我还没准备好,请继续你等我的消息" 这个时候客户端就进入FIN_WAIT状态,继续等待服务端的FIN报文。

    第三次挥手:当服务端确定数据已发送完成,则向客户端发送FIN报文,关闭与客户端的连接。标志位FIN和ACK置为1,顺序号码为Y=1,确认号码为X=2。意思是告诉Client端“好了,我这边数据发完了,准备好关闭连接了。”

    第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认号码为收到的顺序号码加1,即Y+1=2。顺序号码为收到的确认号码X=2。意思是“我Client端知道可以关闭连接了,但是我还是不相信网络,怕 Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。“(在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。)

    为什么关闭的时候却是四次挥(握)手?
    因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    3、TCP报文抓取工具:Wireshark

    捕获过滤器中填入表达式:host www.cnblogs.com and port 80(80等效于http)
    有多个TCP流时在显示过滤器中填入表达式:tcp.stream eq 0 筛选出第一个TCP流(包含完整的一次TCP连接:三次握手和四次挥手)

     

    每条记录都有如下协议层
    (1) Frame:   物理层的数据帧概况
    (2)Ethernet II: 数据链路层以太网帧头部信息
    (3) Internet Protocol Version 4: 互联网层IP包头部信息
    (4)Transmission Control Protocol:  传输层的数据段头部信息,此处是TCP
    (5) Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

     

     

    三、HTTP(HyperText Transfer Protocol,超文本传输协议)

          HTTP是一个应用层协议,虽然在2015年已推出HTTP/2版本,并被主要的web浏览器和web服务器支持。但目前使用最广泛的还是HTTP/1.1版本。有关历史请查阅这里
    它的主要特点可概括如下:

    • 支持客户/服务器模式。
    • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了解决这个问题, Web程序引入了Cookie机制来维护状态。

    另外,HTTP请求报文和响应报文都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。将在下面详细讲解。

    1、请求报文结构

    报文中的数据都使用ASCII编码,各个字段的长度是不确定的(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

    2、请求报文样例

    复制代码
    复制代码
    POST /search HTTP/1.1  
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
    application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
    Referer: http://www.google.cn/  
    Accept-Language: zh-cn  
    Accept-Encoding: gzip, deflate  
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
    Host: www.google.cn 
    Connection: Keep-Alive  
    Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
    NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
    FxlRugatx63JLv7CWMD6UB_O_r  
    

    hl=zh-CN&source=hp&q=domety

    复制代码
    复制代码

     

    3、请求报文参数详解

    请求方法

    所有请求方法名称全为大写,目前有9种:

    备注
    安全性:https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
    幂等性:表示的操作至多只会被处理一次,每次调用都将返回第一次调用时的处理结果。
    关于HTTP请求GET和POST的区别
    (1).提交形式:
       GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的数据放在HTTP包的Body中.
    (2).传输数据的大小:
       HTTP协议本身没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:
       GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
       因此对于GET提交时,传输数据就会受到URL长度的限制。
       POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
    (3).安全性:
        POST的安全性要比GET的安全性高,具有真正的Security的含义。而且通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他用户浏览历史纪录就可以拿到账号和密码了。

    请求报头域

    报头域指头部中的Key,且不分大小写。

    4、响应报文结构

    如所见,响应报文结构与请求报文结构唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

    5、响应报文样例

    复制代码
    复制代码
    HTTP/1.1 200 OK
    Date: Mon, 23 May 2005 22:38:34 GMT
    Content-Type: text/html; charset=UTF-8
    Content-Encoding: UTF-8
    Content-Length: 138
    Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
    ETag: "3f80f-1b6-3e1cb03b"
    Accept-Ranges: bytes
    Connection: close
    

    <html>
    <head>
    <title>An Example Page</title>
    </head>
    <body>
    Hello World, this is a very simple HTML document.
    </body>
    </html>

    复制代码
    复制代码

     

    6、响应报文参数详解

    响应状态码

    状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
    1xx:指示信息--表示请求已接收,继续处理。
    2xx:成功--表示请求已被成功接收、理解、接受。
    3xx:重定向--要完成请求必须进行更进一步的操作。
    4xx:客户端错误--请求有语法错误或请求无法实现。
    5xx:服务器端错误--服务器未能实现合法的请求。
    常用状态码:

    200 OK:成功返回状态,对应,GET,PUT,PATCH,DELETE。
    201 created  - 成功创建。
    302 Found:重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。

                     例如在IE中输入http://www.google.com. HTTP服务器会返回304, IE取到Response中Location header的新URL, 又重新发送了一 个 Request.
    304 Not Modified:代表上次的文档已经被缓存了, 还可以继续使用。
    400 bad request   - 请求格式错误。
    401 unauthorized   - 未授权。
    403 forbidden   - 鉴权成功,但是该用户没有权限。
    404 not found - 请求的资源不存在。
    405 method not allowed - 该http方法不被允许。
    410 gone - 这个url对应的资源现在不可用。
    415 unsupported media type - 请求类型错误。
    422 unprocessable entity - 校验错误时用。
    429 too many request - 请求过多。
    500 Internal Server Error:服务器发生了不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

    响应报头域

    报头域指头部中的Key,且不分大小写。

    7、HTTP报文抓取工具

    Wireshark、Fiddler、HttpWatch(需结合IE)、Telnet
    Wireshark:
    在显示过滤器中填入表达式:http and ip.addr == 42.121.252.58 and tcp.port == 80 过滤出http的响应和请求流程

     

     

    8、Session和Cookie

    说到HTTP,就不得不提Session和Cookie。但严格来说,Session和Cookie并不是http协议的一部分。由于HTTP协议设计原则是无状态的,但是近年来出现了种种需求,其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

    Session

    Session是可以存储针对于某一个用户的浏览器以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。 
    通常大家认为,只要关闭浏览器,session就消失,其实这是错误的理解。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留。由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间.

    (1)第一次访问某个web站点资源时,客户端提交没有带SessionID的请求(请求报文头没有Cookie头域信息)。
      而web服务器会检查是否有SessionID过来,没有则创建SessionID,并根据web程序自身定义在请求哪个资源时添加属于当前会话的信息(也可为空),这个信息列表以SessionID作为标识。然后将SessionID返回给客户端(通过响应报文头的Set-Cookie头域)。
    (2 )客户端再次访问同个web站点时,提交带有SessionID的请求(通过Cookie头域存储SessionID)。由服务端判断session是否失效,如果未失效,可查询属于当前会话的信息列表。如果失效,则创建新的session(产生新的SessionID),而原先的session(包含session带的信息列表)则丢失,无法访问。

    Cookie

    保存SessionID的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个SessionID发回给服务器。Cookie的命名方式类似于SessionID。有时Cookie被人为的禁止,所以出现了其他机制以便在Cookie被禁止时仍然能够把SessionID传递回服务器。这种技术叫做URL重写,就是把SessionID直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://www.wantsoft.com/index.asp;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 。
    另一种是作为查询字符串附加在URL后面,表现形式为http://www.wantsoft.com/index?js ... 99zWpBng!-145788764 。

     

    展开全文
  • 计算机网络协议()——UDP、TCP、Socket

    万次阅读 多人点赞 2019-09-04 08:39:53
    这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师的趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,...

    概述


    这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,绝对物超所值,本文就是对自己学习专栏的总结,评论区可以留下你的问题,咱们一起讨论!


    传输层中有两个重要的协议,UDP和TCP,这也是在开发中经常用到的协议,同样也是面试的重点。本篇将分为三节进行介绍:

    • UDP协议
    • TCP协议
    • 套接字Socket

    一、UDP协议

    很多人都会被问到 TCP和UDP的区别,那么大部分人都会回答,TCP面向连接,UDP面向无连接;

    建立连接:是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性;

    简单介绍下TCP和UDP之间的区别:

    • TCP 提供可靠交付,UDP继承了IP包的特性,不保证不丢失,不保证按时到达;
    • TCP是面向字节流的,发送的时候发的是一个流,没头没尾的。UDP继承了IP的特性,基于数据报的,一个个发,一个个收;
    • TCP是可以有拥堵控制的,可以根据网络环境调整自己的行为;UDP就是应用让我发,我就发,管它洪水滔天;
    • TCP是一个有状态的服务,通俗的讲就是有脑子的,可以精确的记着,自己发送了没有,接收到没有,发送到哪个了,应该接收到哪个了,错一点儿都不行;UDP其实是一个无状态服务,无脑子,天真无邪的发出去就发出去呗;

    UDP的包头
    UDP的包头格式很简单,只有源端口号和目标端口号:
    UDP包头


    UDP的三大特点

    • 沟通简单,秉承性善论,相信网络通路默认就是很容易送达的,不容易被丢弃的;
    • 轻信他人,不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,也可以传给任何人数据;
    • 愣头青,做事不懂权变,不会根据网络的情况进行发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发还怎么发;

    UDP的三大使用场景

    • 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用;
    • 不需要一对一沟通,建立连接,而是可以广播的应用;UDP的不面向连接的功能,可以使得可以承载广播或者多播的协议。DHCP就是一种广播的形式,就是基于UDP协议的;
    • 需要处理速度快,时延低,可以容忍少数丢包,即便网络堵塞,也毫不退缩,一往无前的时候;UDP简单、处理速度快,不像TCP一样,操那么多心;TCP在网络不好出现丢包的时候,拥塞控制策略会主动的退缩,降低发送速度,这就相当于本来环境就差,还自断臂膀,用户本来就卡,这下更卡了

    基于UDP的实际应用

    • 网页或者APP的访问,访问网页和手机APP都是基于HTTP协议(基于TCP)的,建立连接需要多次交互,比较耗时,Google提出了QUIC实现快速连接建立、减少重传时延,自适应拥塞控制;
    • 流媒体的协议,直播协议多使用RTMP(基于TCP),当数据丢包或者网络不好,影响直播的实时性,很多直播应用,都基于UDP实现了自己的视频传输协议;
    • 实时游戏,采用自定义的可靠UDP协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响;
    • IoT物联网,物联网通信协议Thread,就是基于UDP协议的,解决了物联网领域终端资源少,实时性要求高的问题;
    • 移动通信领域:4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的;

    总结:

    • 如果将TCP比作成熟的社会人,UDP则是头脑简单的小朋友;TCP复杂,UDP简单;TCP维护连接,UDP谁都相信;TCP会坚持知进退;UDP铁憨憨一个,勇往直前;
    • UDP简单但有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方。例如DHCP、VXLAN、QUIC

    二、TCP协议(上)

    TCP秉承的是性恶论,天然认为网络环境是恶劣的,丢包、乱序、重传、拥塞都是常见的事情,需要从算法层面来保证可靠性。


    TCP包头格式
    TCP报文格式

    • 源端口号和目标端口号:知道谁发的和发给谁的;
    • 序号:编号是为了解决乱序问题;
    • 确认序号:发出去的包应该有确认,没有收到就应该重新发送,直到送达;
    • 状态位SYN是发起一个连接、ACK是回复、RST是重新连接、FIN是结束连接;
    • 窗口大小:TCP要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处
      理能力,别发送的太快,撑死我,也别发的太慢,饿死我;

    通过对TCP头的解析,我们知道要掌握TCP协议,重点应该关注以下几个问题:

    • 顺序问题 ,稳重不乱;
    • 丢包问题,承诺靠谱;
    • 连接维护,有始有终;
    • 流量控制,把握分寸;
    • 拥塞控制,知进知退;

    2.1 TCP的三次握手

    TCP中所有的问题,都要先建立连接,需要先看连接维护的问题,TCP的连接建立,常被称为三次握手;

    A:您好B,我是A.
    B:您好A,我是B.
    A:您好B

    采用 请求->应答->应答之应答的方式,保证二者的消息传送都是有来有回的;

    三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是TCP包的序号的问题。 每个连接都要有不同的序号。这个序号的起始序号是随着时间变化的,可以看成一个32位的计数器,每4ms加一,其时序图如下:
    状态变化时序图
    1、刚开始客户端和服务端都处于CLOSED状态,服务端先监听某个端口,处于LISTEN状态

    2、客户端主动发起连接请求SYN=1,ACK=0,初始序号为x,之后处于SYN-SENT状态

    3、服务端收到发起的连接请求,如果同意连接就返回SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y,之后处于SYN-RCVD状态

    4、客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,确认号为 y+1,序号为 x+1。之后处于ESTABLISHED状态,因为它一发一收成功了;

    5、服务端收到ACK的ACK之后,处于ESTABLISHED状态,因为它也一发一收了。


    两次握手或者四次不行吗?

    举个例子:

    在一个网络环境不可靠的情况下,A发出一个连接请求,发出一个请求杳无音信就会一直发,终于有一个包到B了,但是A还不知道会继续发;

    收到A的请求之后,B如果同意连接就会发送应答包给A;但是B的应答包也是一入网络深似海啊,不知道能不能到A,所以当然不能认为和A已经建立了连接;

    还有一个问题就是,A和B建立起短暂的连接通信之后,A之前发送的请求包饶了地球不知道多少圈竟然又到了B,假如B认为这是一个正常的连接请求,同意建立连接,但这个连接不会进行下去,也没有个终结的时候,纯属单相思了,因而两次握手肯定不行。

    B发送的应答可能会发送多次,但是只要一次到达A,A就认为连接已经建立了,因为对于A来讲,他的消息有去有回。A会给B发送应答之应答,而B也在等这个消息,才能确认连接的建立,只有等到了这个消息,对于B来讲,才算它的消息有去有回。

    当然A发给B的应答之应答也会丢,也会绕路,甚至B挂了。按理来说,还应该有个应答之应答之应答,这样下去就没底了。四次握手、还是四十次握手都是可以的,哪怕四百次握手也不能百分百保证可靠,只要双方的消息都有去有回就可以了。

    我们在程序设计的时候可以开启keepalive机制,防止A建立连接后空着,不发数据;


    2.2 TCP的四次挥手


    过程如下:
    A:B啊,我不想玩了;
    B:哦,你不想玩了啊,我知道;
    此时的A很可能是发送完最后的数据就准备不玩了,不能在ACK的时候就关闭连接,此时B还没有忙完自己的事情,还是可以发送数据的,称为半关闭状态
    B:A啊,好吧,那我也不玩了,拜拜;
    A:好的,拜拜;

    断开连接的时序图如下所示:

    在这里插入图片描述
    双方一开始都是处于建立连接的状态:

    • A 发送连接释放报文,FIN=1,就进入FIN_WAIT_1的状态;
    • B 收到之后发出确认,此时 TCP 属于CLOSE_WAIT(半关闭)状态,B 能向 A 发送数据但是 A 不能向 B 发送数据;
    • 当 B 不再需要连接时,发送连接释放报文,FIN=1就进入FIN_WAIT_2的状态
    • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接;
    • B 收到 A 的确认后释放连接;

    四次挥手的原因

    客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

    TIME_WAIT

    客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

    • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A
      等待一段时间就是为了处理这种情况的发生。
    • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

    2.3 TCP状态机

    加黑加粗的部分,是上面说到的主要流程,其中阿拉伯数字的序号,是连接过程中的顺
    序,而大写中文数字的序号,是连接断开过程中的顺序。加粗的实线是客户端A的状态变迁,加粗的虚线是服务端B的状态变迁;
    TCP状态机


    三、TCP协议(下)

    参考了CS-Notes的博文,总结的很好!

    TCP传输是可靠的,需要很多机制保证传输的可靠性,里面也要有恒心,就是各种重传的策略;还需要有智慧,里面包含着大量的算法


    如何成为一个靠谱的协议?
    TCP中为了保证顺序性,每一个包都有一个ID;建立连接的时候,会商定起始的ID是什么,然后按照ID一个个发送。采用**累计确认或者累计应答(cumulative acknowledgment)**的方式去保证不丢包;

    为了记录所有发送的包和接收的包,TCP也需要发送端和接收端分别都有缓存来保存这些记录。发送端的缓存里是按照包的ID一个个排列,根据处理的情况分成四个部分:

    • 发送了并且已经确认的;
    • 发送了并且尚未确认的;
    • 没有发送,但是已经等待发送的;
    • 没有发送,并且暂时还不会发送的;

    3.1 可靠传输

    TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。

    一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT加权平均往返时间 RTTs 计算如下:
    Alt

    其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。

    超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下:

    在这里插入图片描述

    其中 RTTd 为偏差的加权平均值


    3.2 TCP滑动窗口

    窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

    发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

    接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。
    在这里插入图片描述

    3.3 TCP 流量控制

    流量控制是为了控制发送方发送速率,保证接收方来得及接收。

    接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

    3.4 TCP 拥塞控制

    如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度
    在这里插入图片描述
    TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复

    发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

    为了便于讨论,做如下假设:

    • 接收方有足够大的接收缓存,因此不会发生流量控制;
    • 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。

    在这里插入图片描述

    3.4.1 慢开始与拥塞避免

    发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 …

    注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。

    如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。

    3.4.2 快重传与快恢复

    在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1M2,此时收到 M4,应当发送对 M2 的确认。

    在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。

    在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

    慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

    在这里插入图片描述

    四、套接字Socket

    在通信之前,双方都要建立一个Socket。Socket编程进行的是端到端的通信,也只能是端到端协议之上网络层和传输层的。

    在网络层中,Socket函数需要指定到底是IPv4还是IPv6,分别对应设置为AF_INET和AF_INET6。还要指定到底是TCP还是UDPTCP协议是基于数据流的,所以设置为SOCK_STREAM,而UDP是基于数据报的,因而设置为SOCK_DGRAM


    4.1 基于TCP协议的Socket程序函数调用过程

    两端创建Socket之后,TCP的服务端调用bind函数监听一个端口, 给这个Socket赋予一个IP地址和端口

    当服务端有了IP和端口号,就可以调用listen函数进行监听。此时的客户端就可以发起连接请求了;

    在内核中为每个Socket维护两个队列,分别是已经建立了连接、完成三次握手后处于established状态的队列;一个是还没有完全建立连接的队列,三次握手还没完成,处于syn_rcvd的状态。

    接下来,服务端调用accept函数,拿出一个已经完成的连接进行处理。

    在服务端等待的时候,客户端可以通过connect函数发起连接。先在参数中指明要连接的IP地址和端口号,然后开始发起三次握手。内核会给客户端分配一个临时的端口。一旦握手成功,服务端的accept就会返回另一个Socket。

    连接建立之后双方开始通过read和write函数来读写数据,下图是基于TCP协议的Socket程序函数调用过程:
    在这里插入图片描述

    4.2 基于UDP协议的Socket程序函数调用过程

    UDP是没有连接的,所以不需要三次握手,也就不需要调用listen和connect,但是,UDP的的交互仍然需要IP和端口号,因而也需要bind函数;但正是没有连接状态,每次通信的时候,都调用sendto和recvfrom,都可以传入IP地址和端口;

    下图就是基于UDP协议的Socket程序函数调用过程
    在这里插入图片描述


    4.3 服务器如何支持高并发?

    在学习了上面的Socket函数之后,可以写一个简单的网络交互程序;

    系统会用一个四元组来标识一个TCP连接

    {本机IP, 本机端口, 对端IP, 对端端口}
    

    最大TCP连接数=客户端IP数×客户端端口数,对IPv4,客户端的IP数最多为2的32次方,客户端的端口数最多为2的16次方,也就是服务端单机最大TCP连接数,约为2的48次方。

    当然最大的TCP连接数还要受到 Socket中的文件描述符以及内存的限制

    如何在资源有限的情况下,进行更多的连接?


    方案一:多进程式

    你相当于一个代理,一旦监听到请求,建立连接就会有一个已连接的Socket,这个时候可以采用fork函数创建一个子进程,将基于已连接Socket的交互交给这个新的子进程来做。子进程就可以通过这个已连接Socket和客户端进行互通了,当通信完毕之后,就可以退出进程。父进程可以通过进程ID查看子进程是否完成项目,是否需要退出。

    相当于来了一个项目,你就找一个外包公司帮你解决这个问题。

    方案二:多线程式
    上面这种方式的问题在于,每次有项目都找外包,这个是不划算的;

    线程就相当于一个公司成立项目组,一个项目做完了,那这个项目组就可以解散,组成另外的项目组;

    通过pthread_create创建一个线程,也是调用do_fork,新的线程也可以通过已连接Socket处理请求,从而达到并发处理的目的。
    多线程式
    基于进程或者线程模型都存在一个问题:
    新到来一个TCP连接,就需要分配一个进程或者线程。一台机器无法创建很多进程或者线程,就是C10K的问题;

    C10K:
    一台机器要维护1万个连接,就要创建1万个进程或者线程,那么操作系统是无法承受的。如果维持1亿用户在线需要10万台服务器,成本也太高了。


    方案三:IO多路复用,一个线程维护多个Socket

    简述一下就是,一个项目组可以看多个项目,每个项目组都应该有个项目进度墙,将自己组看的项目列在那里,然后每天通过项目墙看每个项目的进度,一旦某个项目有了进展,就派人去盯一下。

    Socket是文件描述符,因而某个线程盯的所有的Socket,都放在一个文件描述符集合fd_set(项目进度墙)中,调用select函数来监听文件描述符集合是否有变化,一旦有变化,就会依次查看每个文件描述符。那些发生变化的文件描述符在fd_set对应的位都设为1,表示Socket可读或者可写,从而可以进行读写操作,然后再调用select,接着盯着下一轮的变化。

    方案四:IO多路复用
    方案三中采用select函数来查看fd_set是否有Socket发生变化,每次轮询都会影响性能,且能查看的数量由FD_SETSIZE限制;

    改成事件通知的方式,情况就会好很多,项目组不需要通过轮询挨个盯着这些项目,而是当项目进度发生变化的时候,主动通知项目组,然后项目组再根据项目进展情况做相应的操作。

    通过epoll多路复用模型,它不是通过轮询的方式,而是通过注册callback函数
    方式,当某个文件描述符发送变化的时候,就会主动通知。
    在这里插入图片描述
    如上图所示,进程打开了Socket m, n, x等多个文件描述符,现在需要通过epoll来监听这些Socket是否都有事件发生。其中epoll_create创建一个epoll对象,对应着打开文件列表中那个的一项,通过红黑树来保存这个epoll要监听的所有Socket。

    epoll_ctl添加一个Socket的时候,其实是加入这个红黑树;当一个Socket来了一个事件的时候,可以从这个列表中得到epoll对象,并调用call back通知它。

    这种通知方式使得监听的Socket数据增加的时候,效率不会大幅度降低,能够同时监听的Socket的数目也非常的多;


    总结

    • 需要记住TCP和UDP的Socket的编程中,客户端和服务端都需要调用哪些函数;
    • 能够支撑大量连接的高并发的服务端不容易,需要多进程、多线程,而epoll机制能解决C10K问题。
    展开全文
  • 计算机网络协议——通信协议综述

    万次阅读 多人点赞 2019-09-03 23:20:58
    通信协议综述概述一、为什么学习网络协议1.1 常见网络协议二、网络分层的真正含义2.1 为什么网络要分层?2.2 浏览点击请求过程2.3 揭秘层与层之间的关系、ifconfig 命令行的由来3.1 ip地址3.2 无类型域间选路...
  • 种常见网络协议

    千次阅读 2019-04-17 23:02:10
    常见网络协议有:TCP/IP协议、UDP协议、HTTP协议、FTP协议、Telnet协议、SMTP协议、NFS协议等。 TCP/IP 协议 传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的...
  • 实现计算机系统与网络间的物理连接 数据链路层 2 进行数据打包与解包,形成信息帧 网络层 3 提供数据通过的路由 传输层 4 提供传输顺序信息与响应 会话层 5 建立和中止连接 ...
  • 常用网络协议简介

    千次阅读 2018-03-17 15:35:03
    常用网络协议简介 作者:caoshen_vip 1.TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC 793说明(specified)。TCP在IP报文...
  • 常见网络安全协议

    万次阅读 2019-09-25 20:38:04
    常见网络安全协议 网络认证协议Kerberos Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机...
  • 常见网络协议报头格式

    千次阅读 2017-04-23 12:03:27
    网络协议,报头格式
  • 种常用网络协议

    千次阅读 2018-08-03 15:43:08
    一、OSI模型 名称 层次 功能 物理层 1 实现计算机系统与网络间的物理连接 数据链路层 2 进行数据打包与解包,形成信息帧 网络层 3 提供数据通过的路由 传输层 4 ...
  • 种常用网络传输协议

    千次阅读 2019-10-07 10:36:08
    网络常用协议以及层次关系 1、 进程/应用层的协议 平时最广泛的协议,这一层的每个协议都由客程序和服务程序两部分组成。程序通过服务器与客户机交互来工作。常见协议有:Telnet、FTP、SMTP、HTTP、DNS等。...
  • 种常用网络传输协议

    千次阅读 2018-12-07 16:19:00
    一、OSI模型 名称 层次 功能 物理层 1 实现计算机系统与网络间的物理连接 数据链路层 2 进行数据打包与解包,形成信息帧 网络层 3 提供数据通过的路由 传输层 4...
  • 网络协议三要素

    万次阅读 2015-05-10 10:52:36
     一个网络协议至少包括要素:  语法:用来规定信息格式;数据及控制信息的格式、编码及信号电平等。  语义:用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。  定时:(时序)定义了何时进行通信,先讲...
  • 常见网络端口 和 常见网络协议

    千次阅读 2014-05-07 22:50:22
    常见网络端口 端口:0  服务:Reserved  说明:通常用于分析操作系统。 端口:1  服务:tcpmux  说明:这显示人在寻找SGI Irix机器。 端口:7  服务:Echo  说明:能看到许多人搜索...
  • 网络协议

    千次阅读 2017-09-30 18:06:35
    网络协议:网络为进行数据交换而建立的规则局域网常用的协议: TCP/IP 协议 (目前最流行的协议,没有根本上不了网) NetBEUI IPX/SPX协议 (用来连接玩游戏的) 其中TCP/IP协议包括了上百个互为关联的协议(位于...
  • TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。...
  • 计算机网络协议(二)——从二层到

    万次阅读 多人点赞 2019-09-03 11:56:34
    底层网络知识详解:从二层到层概述一、从物理层到MAC层1.1 第一层(物理层)1.2 第二层(数据链路层)二、交换机与VLAN2.1 如何解决广播问题和安全问题?、ICMP和ping3.1 ICMP协议的格式3.2 ICMP报文类型3.3 ping:...
  • iOS开发之网络编程:常用网络协议

    千次阅读 2016-04-09 10:45:40
    一、网络协议 看了上面那句不明所以得话,好像并没有什么luan用。在第一章提过协议这个概念,就像咱们工作的时候,签的协议,生活中的保单协议,都需要双方同意签字,才能生效。基于网络的应用就决定了数据链上...
  • 常见网络协议整理

    千次阅读 2017-12-31 10:33:04
    DNS 作用是将域名解析为IP 设计域名是为了方便记忆 ...IP协议 对应于网络互联层 作用 查找地址的 TCP协议 对应于传输层 作用:规范传输规则 TCP传输之前会层握手,断开会四次挥手 首先理解
  • 常见网络协议端口号整理

    千次阅读 2018-07-27 14:12:31
    常见网络协议\端口号  一个网络协议至少包括要素: 语法 用来规定信息格式;数据及控制信息的格式、编码及信号电平等。 语义 用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。  时序(定时 ...
  • 防火墙 | 网络协议

    千次阅读 热门讨论 2020-11-08 12:35:35
    每个网络中至少要选择一种网络协议。具体选择网络通信协议主要取决于网络的规模丶网络的兼容性和网络管理等几个方面。常接触的局域网中,一般使用NETBEUT丶IPX/SPX和TCP/IP三种协议。 OSI模型七层 对等层...
  • 常见网络协议含义及端口

    千次阅读 2018-08-06 10:57:45
    FTP(文件传输协议):(21) 下载文件,传输主页 Telnet(远程登录端口):(23) 用户可以以自己的身份远程连接到计算机上,通过此端口可以提供类似DOS窗口的操作 SMTP(邮件传输协议):(25) 用于发送...
  •  tcp与udp相比存在可靠的传输保证,次握手协议等,但udp速度快,tcp要保证数据的接受要有序,每个数据包都一个信号。而且tcp要求ack。  tcp/ip由网络层的ip协议和传输层的tcp协议组成,协议采用了四层的层级...
  • 文章目录网络协议TCP/IP协议IP协议TCP协议(传输控制协议)HTTP协议(超文本传输协议)网络参考模型1、OSI参考模型...常见的协议:TCP/IP协议、IPX/SPX协议、NetBEUI协议 等。 TCP/IP协议 毫无疑问是这大协议...
  • 网络体系结构和网络协议

    千次阅读 2018-05-02 22:32:26
    网络体系结构和网络协议是计算机网络技术中两个最基本的概念。今天我们将从网络层次,服务和协议的基本概念出发,理解一下网络中基本的概念。 一. 网络体系结构的基本概念 1. 什么是网络协议 在生活中,我们多于...
  • 目录一、端口的分类(1)按端口性质来分(2)按提供的服务方式来分二、计算机网络七层模型中对应的协议三、总结         一、端口的分类       &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 387,863
精华内容 155,145
关键字:

常用的网络协议有哪三种