计算机网络基础回顾
对于程序员来说,计算机网络的知识是很重要也很基础的。尤其是做web开发就要对http或者https很熟。有的时候涉及到域名,还会碰到跨域问题。这些其实都是计算机网络相关的知识,本篇就主要回顾下计算机网络中的重要内容:
- 1 IP地址
- 2 分层结构
- 3 网络层
- 4 传输层
- 5 应用层
IP地址
IP地址是一台机器在局域网或者公网上唯一的标识,比如最常见的我们检测本机的网络好不好使需要ping 127.0.0.1
;在局域网的时候,需要设置局域网的地址,比如192.168.0.2
;上网的时候,还需要配置猫...种种的操作都与IP地址有关系。
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的五层体系结构说的比较多点,就简单的描述下他们每层的作用:
- 物理层:这一层涉及到信号的传输,比如双绞线呀、光纤啊等等
- 数据链路层:这一层具体的传输数据类,不过是按照Mac物理地址传输的。主要涉及的问题有数据帧的封装、传输和差错检测。有个很有名的机制——CSMA/CD载波监听多点接入/碰撞检测,用来处理传输的时候传输冲突的。
- 网络层:这一层涉及到IP到MAC的解析等,涉及到的协议有ARP、RARP、ICMP、IGMP等
- 运输层:这个是计算机网络中最重要的一层,因为它里面有两个协议——TCP和UDP,最重要的就是他们的区别,以及TCP的三次握手、四次握手机制,以及一些拥塞控制的方法
- 应用层:这一层的内容是与开发最接近的一层,比如DNS、FTP、HTTP、SMTP等等。
数据链路层
这一层主要负责数据帧的封装、传输和差错检测。
网络层
IP数据报
这一层是对数据报的基础封装,主要是针对分片和IP相关的内容:
协议
另外,这一层主要是几个网络协议很重要,其中包括:
ARP地址解析协议
ARP,Address Resolution Protocol 地址解析协议,是根据IP地址获取对应的物理地址。大致的流程是:
比如A主机访问B主机,对应的ip分别为ipa,ipb;对应的Mac地址为maca,macb
那么:
- A主机现在自己机器上的路由表,查找ipb对应的macb
- 如果找不到则广播请求,如果收到对应的应答,则记录到路由表中
这个APR的缓存一般都是在网卡中记录的。
RARP逆地址解析协议
RARP,Reverse Address Resolution Protocol 用于不知道自己IP只知道Mac地址而想要与其他主机通信的场景。原理过程与ARP差不多。
ICMP网际控制报文协议
ICMP,Internet Control Message Protocol 控制报文协议。这个协议其实日常使用非常多,比如ping和traceroute,它主要用于主机和路由之间传递控制消息。比如网络痛不痛、主机达不达、路由是否可用等等。
IGMP网际组管理协议
IGMP,Internet Group Management Protocol 组管理协议,在组播的场景下比较有用。平时接触的比较少...
单播、多播和广播
- 单播就是固定的两个ip之间的通信,比如访问网页、看看新闻等等;
- 多播一般用于局域网内的视频会议等等,可以节省流量。另外现在很火的直播技术,其实用的也是单播,而非组播。因为组播目前公网没有开放,应该是运营商利益问题或者是安全角度考虑吧
- 广播一般也是在局域网内,比如某个具有探测功能的集群,一般会采用这种方法。
VPN
VPN的全称是Virtual Private Network,是在公网上建立的专用网络,通过复杂的加密手段,可以实现目标地址的远程访问。比如一般的公司,都会开启VPN,这样你放假在家有事情也可以直接连公司的VPN,就像在公司一样进行办公。
常用的端口号
传输层
UDP
UDP, User Datagram Protocol 中文是用户数据报协议。是一种不需要进行连接的传输层协议,提供简单不可靠的服务,没有什么拥塞控制,这种传输协议主要就是用于音频视频的实时传输,丢包无所谓的场景。比如看足球直播,画面花一点或者停顿一下,都是无所谓的,只要后续的传输能正常继续就可以了。使用它的协议包括:TFTP、SNMP、NFS、DNS、BOOTP
特点: 无连接、尽最大努力交付、面向报文;并且没有拥塞控制、支持多种对接方式、首部开销小。
小故事: 据说很多有年代的即时通讯比如QQ底层是基于UDP为主的,主要的原因就是TCP在0几年那个网络环境很差的时代,开销太大。一旦网络发生拥塞,TCP的重传或者三次握手,都会有很大的压力。因此就采用UDP,基于应用层进行重传、乱序等机制的封装。参考资料:QQ为什么以UDP为主TCP为辅
TCP
TCP,Transmission Control Protocol 传输控制协议,它是一种面向连接、可靠的、基于字节流的传输通信协议。在可靠性方面,TCP通过超时重传以及确认机制进行传输;在流量控制方面,采用滑动窗口协议,进行窗口内的分组确认以及重传。
关于流量控制,有个很经典的机制就是——慢开始和拥塞避免,之前在做分布式日志采集的时候,想要引入这种机制来着,后来不了了之了。
TCP的连接采用三次握手机制
三次握手说起来很简单,就是A想和B建立连接,那么需要经过三个步骤:
- A发起连接请求
- B确认并且发起连接请求
- A确认B的连接请求
TCP的释放采用四次握手机制
因为TCP是全双工的通信方式,即两个方向都可以传输数据。因此在释放的时候需要双向进行释放。如果只释放了单向,那么另一个方向也是可以传输数据的。步骤大致如下:
- A发起关闭请求
- B确认
- B发起关闭请求
- A确认