TCP/IP协议 & HTTP和HTTPS的区别 &am
基础概念
-
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层(OSI)。 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对 TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要 解决如何包装数据。
-
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果 没有应用层,便无法识别数据内容。如果想要使传输的数据有意义,则必须使用到应用层协议。应用层协议有很多,比如HTTP、FTP、TELNET等,也可 以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
下面是一些经常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。
一、TCP连接与释放
连接时需要三次握手
- 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
-
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
三次握手建立连接
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”
二、利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
- 1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
- 2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
- 3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给 客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
三、HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求 都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
四、HTTP和HTTPS的区别
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
五、TCP和UDP的区别
- 1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上 保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正 确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
- 2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。知道了TCP和UDP的区 别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发 进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而 实现了TCP所无法达到的传输效率。
六、TCP/IP四层协议
TCP/IP四层协议1) 网络接口层:
这一块主要主要涉及到一些物理传输,比如以太网,无线局域网
2) 网络层:
提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换.
在 TCP / IP 协议族中,网络层协议包括 IP 协议(网际协议),ICMP 协议( Internet 互联网控制报文协议),以及 IGMP 协议( Internet 组管理协议)
目前市场上应用的最多的是 32 位二进制的 IPv4 ,因为 IPv4 的地址已经不够用了,所以 128 位二进制的 IPv6 应用越来越广泛了(但是下面的介绍都是基于 IPv4 进行的)
- IP:
TCP/IP 协议网络上的每一个网络适配器都有一个唯一的 IP 地址.
IP 地址是一个 32 位的地址,这个地址通常分成 4 端,每 8 个二进制为一段,但是为了方便阅读,通常会将每段都转换为十进制来显示,比如大家非常熟悉的 192.168.0.1
IP 地址分为两个部分:网络 ID && 主机 ID
绝大部分 IP 地址属于以下几类
A 类地址:IP 地址的前 8 位代表网络 ID ,后 24 位代表主机 ID。
B 类地址:IP 地址的前 16 位代表网络 ID ,后 16 位代表主机 ID。
C 类地址:IP 地址的前 24 位代表网络 ID ,后 8 位代表主机 ID。
这里能够很明显的看出 A 类地址能够提供出的网络 ID 较少,但是每个网络可以拥有非常多的主机
如果 32 位的 IP 地址以 0 开头,那么它就是一个 A 类地址。
如果 32 位的 IP 地址以 10 开头,那么它就是一个 B 类地址。
如果 32 位的 IP 地址以 110 开头,那么它就是一个 C 类地址。
那么转化为十进制(四段)的话,我们就能以第一段中的十进制数来区分 IP 地址到底是哪类地址了。 - 地址解析协议 ARP
简单的来说 ARP 的作用就是把 IP 地址映射为物理地址,而与之相反的 RARP(逆向 ARP)就是将物理地址映射为 IP 地址。 -
子网
前面提到了 IP 地址的分类,但是对于 A 类和 B 类地址来说,每个网络下的主机数量太多了,那么网络的传输会变得很低效,并且很不灵活。比如说 IP地址为 100.0.0.0 的 A 类地址,这个网络下的主机数量超过了 1600 万台。
所以子网掩码的出现就是为了解决这样的问题。
我们先回顾一下之前如何区分主机 IP 和网络 IP 的。
以 A 类地址 99.10.10.10 为例,前 8 位是网络 IP ,后 24 位是主机 IP 。(如下图)
A 类地址
子网掩码也是一个 32 为的二进制数,也可以用四个十进制数来分段,他的每一位对应着 IP 地址的相应位置,数值为 1 时代表的是非主机位,数值为 0 时代表是主机位。
子网掩码
由表格可以很清晰的看出,网络 IP 仍是由之前的分类来决定到底是多少位,主机 IP 则是由子网掩码值为 0 的位数来决定,剩下的则是子网 IP
- 传输层:
为网络提供了流量控制,错误控制和确认服务.
在 TCP / IP 协议族中有两个互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议).
这是两种到达目标网络的方式
传输控制协议(TCP):提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议。
用户数据报协议(UDP):只提供了基本的错误检测,是一个无连接的协议。
特点:
- 传输层:
UDP:
把数据打包
数据大小有限制(64k)
不建立连接
速度快,但可靠性低
TCP:
建立连接通道
数据大小无限制
速度慢,但是可靠性高
- 应用层:
为网络排错,文件传输,远程控制和 Internet 操作提供具体的应用程序
应用层做为 TCP/IP 协议的最高层级,对于我们移动开发来说,是接触最多的。
- 应用层:
运行在TCP协议上的协议:
HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
运行在UDP协议上的协议:
BOOTP(Boot Protocol,启动协议),应用于无盘设备。
NTP(Network Time Protocol,网络时间协议),用于网络同步。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
其他:
DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。
SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。
ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。
七、TCP/IP数据包
在 TCP / IP 协议中数据先由上往下将数据装包,然后由下往上拆包
在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头,当上层的数据到达本层的时候,会将数据加上本层的报头打包在一起,继续往下传递.
TCP/IP数据包