对于程序员来说,计算机网络的知识是很重要也很基础的。尤其是做web开发就要对http或者https很熟。有的时候涉及到域名,还会碰到跨域问题。这些其实都是计算机网络相关的知识,本篇就主要回顾下计算机网络中的重要内容:
IP地址是一台机器在局域网或者公网上唯一的标识,比如最常见的我们检测本机的网络好不好使需要ping 127.0.0.1
;在局域网的时候,需要设置局域网的地址,比如192.168.0.2
;上网的时候,还需要配置猫...种种的操作都与IP地址有关系。
IP地址的结构是这样的:0-255.0-255.0-255.0-255,但是并不是每一个ip都能随便给别人用的,IP地址大致分为五类:
类型 | 网络位与主机位 | IP范围 |
---|---|---|
A类 | 前8位为网络位 0开头 | 1.0.0.0/8-126.0.0.0/8 |
B类 | 前16位为网络位 10开头 | 128.0.0.0/16-191.0.0.0/16 |
C类 | 前24位为网络位 110开头 | 192.168.0.0/24-223.0.0.0/24 |
D类 | 不区分网络位和主机位 1110开头 | 224.0.0.0-232.0.0.0 |
E类 | 不区分网络位和主机位 11110开头 | 233.0.0.0-255.0.0.0 |
这里的网络位和主机位就涉及到子网掩码的作用了....一般公司或者我们自己上网的IP都是C类的。这个C类的地址只是一个出口,内部会形成一个局域网,内部的IP就随便分类啦...只要最后数据包能从这个口发出去就行啦。
note: 127.0.0.0/8作为环回地址测试使用
127.0.0.1是回环地址,这个应该是众所周知的。那么它到底有什么作用呢?搜索了一下知乎的答案,可以这么理解:
127.0.0.1是专门给本机用的,叫做lookback,即回环,它是一块虚拟的网卡。如果本机的两个软件进行通信,就可以直接使用127.0.0.1,这样可以避免再走一次协议栈(物理层、数据链路层、ip层),节省了大量的时间。这个地址一般配置再电脑的hosts文件里面,当然你也可以改...改完大量的软件都可能不好使了...localhost默认就是指向的这个ip地址。
计算机网络的体系结构有几种版本,最常见的就是OSI的七层网络模型:
物理层-->数据链路层-->网络层-->运输层-->会话层-->表示层-->应用层
另外还有TCP/IP的五层结构:
物理层-->数据链路层-->网络层-->运输层-->应用层
一般TCP/IP的五层体系结构说的比较多点,就简单的描述下他们每层的作用:
这一层主要负责数据帧的封装、传输和差错检测。
这一层是对数据报的基础封装,主要是针对分片和IP相关的内容:
另外,这一层主要是几个网络协议很重要,其中包括:
ARP,Address Resolution Protocol 地址解析协议,是根据IP地址获取对应的物理地址。大致的流程是:
比如A主机访问B主机,对应的ip分别为ipa,ipb;对应的Mac地址为maca,macb
那么:
这个APR的缓存一般都是在网卡中记录的。
RARP,Reverse Address Resolution Protocol 用于不知道自己IP只知道Mac地址而想要与其他主机通信的场景。原理过程与ARP差不多。
ICMP,Internet Control Message Protocol 控制报文协议。这个协议其实日常使用非常多,比如ping和traceroute,它主要用于主机和路由之间传递控制消息。比如网络痛不痛、主机达不达、路由是否可用等等。
IGMP,Internet Group Management Protocol 组管理协议,在组播的场景下比较有用。平时接触的比较少...
V**的全称是Virtual Private Network,是在公网上建立的专用网络,通过复杂的加密手段,可以实现目标地址的远程访问。比如一般的公司,都会开启V**,这样你放假在家有事情也可以直接连公司的V**,就像在公司一样进行办公。
UDP, User Datagram Protocol 中文是用户数据报协议。是一种不需要进行连接的传输层协议,提供简单不可靠的服务,没有什么拥塞控制,这种传输协议主要就是用于音频视频的实时传输,丢包无所谓的场景。比如看足球直播,画面花一点或者停顿一下,都是无所谓的,只要后续的传输能正常继续就可以了。使用它的协议包括:TFTP、SNMP、NFS、DNS、BOOTP
特点: 无连接、尽最大努力交付、面向报文;并且没有拥塞控制、支持多种对接方式、首部开销小。
小故事: 据说很多有年代的即时通讯比如QQ底层是基于UDP为主的,主要的原因就是TCP在0几年那个网络环境很差的时代,开销太大。一旦网络发生拥塞,TCP的重传或者三次握手,都会有很大的压力。因此就采用UDP,基于应用层进行重传、乱序等机制的封装。参考资料:QQ为什么以UDP为主TCP为辅
TCP,Transmission Control Protocol 传输控制协议,它是一种面向连接、可靠的、基于字节流的传输通信协议。在可靠性方面,TCP通过超时重传以及确认机制进行传输;在流量控制方面,采用滑动窗口协议,进行窗口内的分组确认以及重传。
关于流量控制,有个很经典的机制就是——慢开始和拥塞避免,之前在做分布式日志采集的时候,想要引入这种机制来着,后来不了了之了。
三次握手说起来很简单,就是A想和B建立连接,那么需要经过三个步骤:
因为TCP是全双工的通信方式,即两个方向都可以传输数据。因此在释放的时候需要双向进行释放。如果只释放了单向,那么另一个方向也是可以传输数据的。步骤大致如下: