该篇介绍宏观层面的TCP/IP协议
一、TCP/IP 协议的层次结构(宏观)
TCP/IP参考模型分为四个层次:应用层、传输层、网络(互连)层和主机到网络层(数据链路层)
1.1 应用层
应用层面向不同的网络应用引入了不同的应用层协议。
- 传输层采用TCP协议的有:
HTTP
:超文本传输协议(Hyper Text Transfer Protocol)HTTPS
:超文本传输安全协议(Hyper Text Transfer Protocol Secure)FTP
:文件传输协议(File Transfer Protocol)它定义了本地登录用户与远程服务器之间的交互过程。SFTP
:文件加密传输协议(Secure File Transfer Protocol)TELNET
:远程登录(Telecommunications Network)提供远程访问其它主机功能,它允许用户登录 internet主机,并在这台主机上执行命令.
- 传输层采用UDP协议的有:(一次性传输的数据需求很少)
TFTP
:简单文件传输协议(Trivial File Transfer Protocol)FTP的简化版本SNMP
:简单网络管理协议(Simple Network Management Protocol)该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.NTP
:网络时间协议(Network Time Protocol)
- 传输层同时采用TCP和UDP协议的有:
DNS
(域名系统):该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
Ps:
HTTP是面向网页(文本信息)的,而FTP是面向文件的
1.2 传输层
TCP
:传输控制协议(transmission control protocol)UDP
:用户数据报协议(user datagram protocol)
TCP
与UDP
的区别:
- 基于连接与无连接;
- 对系统资源的要求(TCP较多,UDP少);
- UDP程序结构较简单;
- 流模式与数据报模式;
- TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证.
TCP
与 UDP
的主要区别:
UDP具有TCP所望尘莫及的速度优势,但在于UDP不一定提供可靠的数据传输。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。
Ps:
许多程序将使用单独的TCP连接和单独的UDP连接;重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。
1.3 网络层(网络互连层)
网络互连层定义了分组格式和协议。
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。
IP
:Internet 协议(Internet Protocol)ICMP
:Internet控制信息协议ARP
:地址解析协议RARP
:反向地址解析协议
1.4 网络访问层(主机到网络层)
网络访问层的功能包括IP地址与物理地址硬件的映射,以及将IP封装成帧.基于不同硬件类型的网络接口,网络访问层定义了和物理介质的连接。
二、常见术语、疑问 介绍
TCP/IP协议:是一组网络协议。在这些协议中,最重要、最著名的就是TCP和IP因此,大部分网络管理员称整个协议族为“TCP/IP”。包括:TCP,IP,UDP,ARP等,这些被称为子协议。
2.1 TCP与IP的区别
由第一章的TCP/IP 协议的层次结构可知,TCP
和 IP
是在不同层的,因此两者本来就天差地别。
TCP
:位于传输层,是一种面向连接的、端对端的、可靠的、基于IP的传输层协议。主要特点是3次握手建立连接,4次挥手断开连接。IP
:位于网络层,IP协议规定了数据传输时的基本单元(数据包)和格式,IP协议还定义了数据包的递交办法和路由选择。
总结:
- 整个网络中的传输流程是:IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层——TCP层;相反,IP层也把从TCP接收来的数据包传送到更低层。
- TCP和IP的关系是:IP提供基本的数据传送,而高层的TCP对这些数据包做进一步加工,如提供端口号等等。
2.2 Telnet的衍生(SSH等)
TELNET
:远程登录(Telecommunications Network)提供远程访问其它主机功能;听起来很陌生,但实际上我们是经常使用远程登录的功能,即使用Telnet的衍生;
Telnet
用来訪问远程计算机的TCP/IP协议以控制你的网络设备,是明码传输,缺乏安全性。因此诞生了远程登录的加密传输,如下:
SSH
:Secure Shell(包括SSH1和SSH2)Telnet/SSL
: Secure Socket Layer。Telnet/SSL是带有SSL的Telnet。Rlogin
:Rlogin和Telnet功能使用方法相似,可是简单非常多。Serial
:串行指每次一个事件,它通常跟并行即一次发生多个事件相反,例如键盘和鼠标仅仅须要串行接口和线路TAPI
:telephone Application Programming Interface (它能够使用户在电脑上通过电话或视频电话与电话还有一端的人进行交谈)电话应用编程接口RAW
:大多数打印设备的默认协议
2.3 VPN和SS、SSR
这里讲一下大家常见到的VPN和SSR的来头。
2.3.1 什么是VPN
vpn在很多人心目中就是用来科学上网的工具,其实不是。vpn最主要的功能,并不是用来科学上网,只是它可以达到科学上网的目的。vpn–虚拟专用网络,它的功能是:在公用网络上建立专用网络,进行加密通讯。
2.3.2 什么是ss/ssr
ss:ss作者是clowwindy,大约两年前,他自己为了科学上网写了shadowsocks,简称ss或者叫影梭,后来他觉得这个东西非常好用,速度快,而且不会被封锁,他就把源码共享在了github上,然后就火了,但是后来作者被请去喝茶,删了代码,并且保证不再参与维护更新。现在这个好像是一个国外的大兄弟在维护。
ssr:在ss作者被喝茶之后,github上出现了一个叫breakwa11(破娃)的帐号,声称ss容易被防火墙检测到,所以在混淆和协议方面做了改进,更加不容易被检测到,而且兼容ss,改进后的项目叫shadowsocks-R,简称ssr,然后ss用户和ssr用户自然分成了两个派别,互相撕逼,直到前阵子,破娃被人肉出来,无奈之下删除了ssr的代码,并且解散了所有相关群组。
ss和ssr它的原理都是一样的,就是socks5代理。socks代理只是简单的传递数据包,而不必关心是何种协议,所以socks代理比其他应用层代理要快的多。socks5代理是把你的网络数据请求通过一条连接你和代理服务器之间的通道,由服务器转发到目的地,这个过程中你是没有通过一条专用通道的,只是数据包的发出,然后被代理服务器收到,整个过程并没有额外的处理。通俗的说,现在你有一个代理服务器在香港,比如你现在想要访问google,你的电脑发出请求,流量通过socks5连接发到你在香港的服务器上,然后再由你在香港的服务器去访问google,再把访问结果传回你的电脑,这样就实现了科学上网。
2.4 DNS
DNS是域名解析服务器,是把网址变成IP地址的服务器。DNS说白了是把域名翻译成IP地址用的。
举例 ,例如我们在浏览器里面输入www.baidu.com
的时候,机器要跟百度这个网站进行通信,机器要往外面发送数据包,数据包里面要写百度这服务器的IP地址,我们不知道IP地址是多少,那么就需要主机问DNS服务器,DNS服务器就自动帮我们把www.baidu.com
这个域名翻译成了IP地址61.135.169.105
。
这就是DNS的作用,所以你的本地连接里面写DNS才能正常浏览网页,如果不设置DNS的话,是无法正常访问网页的。
注意!是无法正常访问网页,还是能够上网的。如果没有填写DNS,可以直接使用形如 http://192.168.2.10
IP地址的形式来进行 网页访问。
2.5 Socket 和 端口号
TCP通讯:两个进程在两个计算机上,需要有一个进程做被动方,叫做服务器。另一个做主动方,叫做客户端。
2.5.1 端口号来源
当两台机器通过IP链接通讯,当如果其中一台机器还想和别的机器搞事情呢?例如你浏览多个网页,那怎么办?现在都讲究多进程、多线程,那多进程怎么区分了链接,就衍生出端口号。同个IP,开放多个port(端口号),多个进程执行数据交互。
Ps:
端口是TCP/IP协议中的概念,描述的是TCP协议上的对应的应用,可以理解为基于TCP的系统服务,或者说系统进程!特定的服务往往需要特定的端口;例如,FTP就需要占用特定的TCP端口。
因此,服务器程序需要绑定在本机的某个端口号上。客户端需要声明自己连接哪个地址的那个端口。两个进程通过网络建立起通讯渠道,然后就可以通过 recv 和 send 来收发一些信息,完成通讯。
2.5.2 Socket
Socket:就是 传输层TCP协议 到 应用层HTTP
、HTTPS
、FTP
的基石。中文:套接字。指代承载这种通讯的TCP系统资源的标识。(系统资源:协议,本地地址,本地端口号,远地地址,远地端口号)。
无论是什么模块进行连接网络通信,最终都会进行应用层的数据交互(除了裸流)。但是传输层和应用层的TCP连接是有基石的,那就是Socket。
由于往往是听过应用层协议连接,而Socket是作为应用层基石。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。
Socket虽然是 传输层TCP协议&应用层的基石。但是也可以不需要应用层,也就是裸流连接。常见于菜鸟的服务器,即没有任何通信协议,就像是用串口调试助手直接连一样。外面的人常直接称呼 TCP通信。
Ps:
这种Socket连接方式,常见于嵌入式物联网、简单物联设备等。
Socket如果是严格区分的话,它带有的资源应该是:本地端口号、远地IP地址、远地端口号。因为本地IP定义下来后就不会再更改,实现多Socket链接通信,其实需要的就是多个 本地端口号、远地IP地址、远地端口号,组合成多Socket通信。
2.6 内网穿透
内网穿透概念往往用于 大学、公司内部。
简单来说内网就是我们常说的局域网(LAN),而外网则是指广域网(WAN)。比如大学、医院、或者政府机构这些单位中,给每一个人分配一个IP地址,这显然是不现实的:一方面是因为这些单位的人员数量庞大,另一方面是因为人员数量也是变动的。为了解决这个问题,就出现了内网。
也就是说分配真实的IP,实际上只分配给广域网。局域网则是由网络管理员给的虚拟IP。
内网和外网的区别
以大学的校园网为例:
- 一个大学的校园网至少有一个真实的IP地址,这个真实IP地址会作为整个校园网的出口,而其他的IP地址被称为假IP地址,假的IP地址发送的网络请求会通过真实的IP地址发送到因特网上,并将获得的资源再通过这个真实的IP地址返回过来。就这样完成了网络通讯的过程。
- 你连学校内网,登上你的百度账号,下载百度文库的文件,会显示你是xx学校的,然后免费下载,就是因为你的网络请求实际上是从 学校真实的IP 发出去的。因此百度才会知道你是xx学校的。
假IP地址的特点:它能够访问外网IP地址,但外网IP地址却无法找这个假的IP地址。
因此如果想要从外网IP地址找到该虚拟IP地址,这台内网电脑就要实现内网穿透,常见的有花生壳。
2.7 现实的网络插口
在现实生活中的网络插口,则是有两个灯,一绿一橙。
- 绿灯表示物理连接线正常,即网线有插好
- 橙灯表示网络通讯,如果在闪烁,说明在通讯;接近常亮,就说明通讯频率高
- 如果两个灯都正常,而网络异常;就要考虑是不是外部网络出现问题,例如DNS之类的。