zoukankan      html  css  js  c++  java
  • 互联网协议

    网络基础

    导读

    • 网络通信的第一步必须拥有物理连接介质(传输介质)。
    • 其次,还需要定义通信的标准,实现无障碍通信,这个标准叫互联网协议

    互联网协议

    互联网协议按照功能不同分为osi七层或者tcp/ip五层或tcp/ip四层

    • 物理层
      • 获取到对端计算机的电信号数据,例如1010101010010
    • 数据链路层
      • 以太网协议
      • 它规定了010101的二进制电信号的分组方式
        • head:18个字节
        • 6个字节是发送者
        • 6个字节是接收者
        • 6个字节是数据类型
        • data
        • 电信号的具体数据
      • 但凡接入互联网的机器,必须有一块网卡
        • 网卡(用来标识全世界独一无二的一台计算机)每块网卡出厂时都会被烧制上全世界唯一的编号(MAC地址),被称为物理地址,通常由12位16进制的数表示(前6位是厂商编号,后六位是流水线号)
        • 这个唯一表示计算机独一无二的地址就叫做mac地址

    基于以太网协议的通讯方式:

    广播和单播,广播会产生广播风暴,只能在局域网内实现通讯,无法跨局域网

    • 网络层
      • ip地址(ip协议)
      • 点分十进制的数字组成
      • 最小范围:0.0.0.0
      • 最大范围:255.255.255.255
      • ip的版本
      • ipv4
      • ipv6
      • ip的作用
      • 用于表示全世界某一台计算机的局域网位置

    因此,在网络层我们获得了ip地址+mac地址,可以标识全世界某一个局域网内的某一台计算机

    • 传输层
      • tcp与udp都是基于“端口”实现通讯的
      • 主要是软件与软件之间进行通讯
      • port端口,用来标识计算机中某一个独一无二的软件

    因此,在传输层我们获得了ip地址+mac地址+port端口,可以标识全世界范围内某一个局域网内某一台计算机上的某一个软件。

    • 应用层
      • 大佬们定制好的一套牛X的协议
      • http协议
      • ftp协议
      • 自定义的协议

    交换机

    • 二层交换机,负责一个小的局域网(交换功能)
    • 三层交换机,负责小的局域网之间的交互,带转发功能(交换和路由功能)
    • 四层交换机,能根据你走的是什么协议去找到对应的应用

    TCP协议的三次握手和四次挥手

    建立连接的三次握手

    • 第一握手,客户端向服务端发送建立连接的请求
    • 第二次握手,服务端如果同意连接,向客户端发送应答
    • 第三次握手,当客户端收到同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发送来的连接同意应答已经成功收到了

    第一次握手
    客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。

    • PS1:SYN=1,ACK=0表示该报文段为连接请求报文。
    • PS2:x为本次TCP通信的字节流的初始序号。
      TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号。

    第二次握手
    服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。
    该应答发送完成后便进入SYN-RCVD状态。

    • PS1:SYN=1,ACK=1表示该报文段为连接同意的应答报文。
    • PS2:seq=y表示服务端作为发送者时,发送字节流的初始序号。
    • PS3:ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。

    第三次握手
    当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
    该报文段的头部为:ACK=1,seq=x+1,ack=y+1。
    客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

    为什么连接建立需要三次握手,而不是两次握手?
    防止失效的连接请求报文段被服务端接收,从而产生错误。

    PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。

    若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

    作者:大闲人柴毛毛
    链接:https://www.zhihu.com/question/24853633/answer/254224088
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    四次挥手





  • 相关阅读:
    iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
    tableView中deselectRowAtIndexPath的作用
    升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
    UITableView代理和数据源方法总结
    ios修改textField的placeholder的字体颜色、大小
    iOS-TextField知多少
    iOS开发SVN更新代码不报错却运行不了问题
    apache http server 局域网无法访问
    修改 apache http server 默认站点目录
    批处理 教程(转载)
  • 原文地址:https://www.cnblogs.com/cnhyk/p/11984771.html
Copyright © 2011-2022 走看看