关于TCP/IP协议簇

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个网络间实现信息传输的协议簇.TCP/IP协议严格来说是一个四层的体系结构,应用层,传输层,网络层和数据链路层的包含其中.这就是常说的四层协议
TCP需要建立一个连接形成可靠的通信,它的报文种 主要包括源和目标的端口号,确认号(ACK),窗口机制(windows),也称为流控制机制(flow control);TCP 在连接建立过程种根据双方窗口大小指定可以传输的数据量.
ISO七层协议

1. 传输层协议和应用层协议的关系常见协议端口号

从上图不难看出,传输层加了端口号来标识应用层的每个协议,那么我们可以知道应用层协议和传输层协议之间的关系:

  1. HTTP协议默认使用了TCP的80端口号
  2. FTP协议默认使用了TCP是21端口号
  3. TELNET协议默认使用了TCP23端口号
  4. SMTP协议默认使用了TCP的25端口号
  5. DNS协议默认使用了UDP的53端口号
  6. RIP协议默认使用了UDP的520端口号
  7. DHCP协议默认使用了UDP的67端口号

2. 传输层协议和网络层协议的区别

简单来说,传输层协议主要用于主机的进程与进程之间的相互通信(TCP和UDP协议的作用范围),而网络层协议主要应用于主机与主机的相互通信(IP协议的作用).

3. 应用层的主要功能

应用层的主要功能是将用户的操作通过应用程序转换成为服务,并匹配一个相应的服务协议发送给传输层.
应用层主要包括应用程序(program),服务(service)和实现服务的协议(protocol);应用程序为我们提供创建消息的方法,服务负责创建与网络交互的接口,协议负责提供进行数据处理的规则和格式;


1. FTP(File Transfer Protocol) 应用层协议

基于客户服务器模式,FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端,提供交互式的访问 面向连接,使用TCP/IP可靠的运输服务,主要功能: 减少/消除不同 操作系统下文件的不兼容性.

  1. 作用: 就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或者把本地计算机的文件送到远程计算机去.
  2. 支持的传输方式 : 文本(ASCII)方式和二进制(Binary)方式.通常文本文件的传输采用ASCII方式,而图像,声音文件,加密和压缩文件等非文本文件采用二进制方式传输,如果为了从一个系统上传输文件而使用了与本地系统不同的计算机字节位数,那么就必须使用Tenex模式. FTP以ASCII方式作为缺省的文件传输方式.
  3. 传输模式:主动(FTP Port)模式 和被动(FTP Passive)模式.
    当我们对FTP协议进行学习的时候,你首先要考虑到的一个问题是使用的是Port模式(主动)的还是Passive模式(被动).在过去,客户端缺省为主动模式;近来,由于Port模式的存在安全问题,许多客户端的FTP应用缺省变为了被动模式.
    FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫控制端口).通常来说这两个端口是21 - 命令端口 和 20 - 数据端口.
    相比于HTTP,FTP协议要复杂得多.复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据.
    PORT方式
    PORT(主动)方式的连接过程是: 客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路.当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了xxxx端口,你过来连接我”.于是服务器从20端口向客户端的xxxx端口发送连接请求,建立一条数据链路来传送数据.
    PASV(被动)方式
    PASV(被动)方式的连接过程是: 客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路.当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”.于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据.
    总结来说,主动模式时,由客户端提供数据传输端口.被动时,由服务器端提供数据传输的端口.

2. HTTP协议(Hyper Text Transfer Protocol,超文本传输协议) 80端口

是一种最基本的客户端/服务器的访问协议.浏览器向服务器发送请求,而服务器回应相应的网页,用于从万维网(www: world wide web)服务器传输超文本到本地浏览器的传送协议.
既然TCP/UDP是广泛使用的网络通信协议,那为啥又多出个http协议呢?
TCP协议是基于连接和三次握手的,虽然具有可靠性,但人具有一定的缺陷.试想一下,普通的C/S架构软件,顶多上千个Client同时连接,而B/S架构的网站,十万人同时在线也是很平常的事儿.
这就衍生了http协议.基于TCP的可靠性连接.通俗点说,就是在请求之后,服务器端立即关闭连接,释放资源.这样既保证了资源可用,也吸取了TCP的可靠性的优点.
正因为这点, 所以大家通常说http协议是"无状态"的,也就是"服务器不知道你客户端干了啥",其实很大程度上是基于性能考虑的.以至于后来有了session之类的玩意.
http协议汇总对比

HTTP1.0 无状态,无连接
HTTP1.1 1.持久连接 2请求管道化 3增加缓存处理(新的字段如cache-control) 4.增加host字段,支持断点传输等(把文件分成几部分)
HTTP2.0 1.二进制分帧 2. 多路复用(或连接共享)3.头部压缩 4.服务器推送

HTTP1.0 :
浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开tcp 连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态).
影响http网络请求的因素主要有两个: 宽带和延迟.
.宽度:拔号时代宽带是一个很大的限制因素,但是现在网络基础建设已经使得宽带得到极大的提升.
延迟:

  1. 浏览器阻塞(HOL blocking):有些浏览器对于同一个域名,同时只能由4个连接,超过浏览器最大连接数限制,后续请求就会被阻塞.
  2. DNS查询(DNS Lookup) : 浏览器需要知道目标服务器的IP才能建立连接.将域名解析为IP的这个系统就是DNS.这个通常可以利用DNS 缓存结构来达到减少这个时间的目的.
  3. 建立连接(Initial connection) : HTTP 是基于TCP协议的,浏览器最快也要在第三次握手时才能捎带HTTP请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动.三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大.

HTTP1.1:
HTTP1.0中默认使用Connection: close.在HTTP/1.1 中已经默认使用Connection : keep -alive,避免了连接建立和释放的开销,但服务器必须按照客户端请求的先后顺序依次回送相应的结构,以保证客户端能否区分出每次请求的响应内容. 通过 Content - Length字段来判断当前请求的数据释放已经全部接收. 不允许同时存在两个 并行的响应 .
HTP1.1 支持长连接(PersistentConnection) 和请求的流水线(Pipelining)
HTTPS(协议端口443)与HTTP(80)的一些区别 :
HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
HTTP2.0:
HTTP /2 引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并数据错乱的情况. 同样是因为有了序列,服务器就可以并行的传输数据,这就是流所做的事情.
多路复用:
1.所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流.
2.每个数据流以消息的形式发送,而消息由一个或多个帧组成.这些帧可以乱序发送,然后根据每个帧头部的流标识符(stream id)重新组装.
4. 另外,多路复用(连接共享)可能会导致关键请求被阻塞.HTTP2.0里每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子数据流.


SMTP协议(Simple Mail Transfer Protocol 简单邮件传输协议,用户发信到邮件网关的传输协议)

面向连接的 Client/Server模式.它是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知.
基本功能: 写信,传送,报告传送情况,显示信件,接收方处理信件.
可以简单地通过telnet程序来测试一个SMTP服务器.SMTP使用TCP端口25. 要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange) DNS.
SMTP 是一个"推"的协议,它不允许根据需要从远程服务器上"拉"来消息.要做到这点,邮件客户端必须使用 POP3 或 IMAP.另一个SMTP服务器可以使用ENTRN在SMTP上触发一个发送.

其实直接在cmd中终端 利用>telnet smtp.qq.com 25
就可以连接qq邮箱的服务器端了进行发邮件了.
具体操作: https://www.cnblogs.com/panxuejun/p/10094152.html

一封邮件的发 & 收的流程是通过SMTP进行发送,使用POP3或者IMAP4进行接收的.
Sender —(SMTP)—> Sender’s Mail Server --(SMTP)–> Pecipient’s Mail Server ----(IMAP/POP3)---->Recipient
具体协议见下面网址链接
https://blog.csdn.net/liumiaocn/article/details/81131420

最初的 SMTP的局限之一在于它没有对发送方进行身份验证的机制.因此,后来定义了SMTP-AUTH扩展.
尽管有了身份认证机制,垃圾邮件仍然是一个主要的问题.但由于庞大的SMTP安装数量带来的网络效应,大刀阔斧地修改或完全替代SMTP被认为是不现实的. Internet Mail2000就是一个替代SMTP的建议方案.

POP3(Post Office Protocol 3的简称)即邮局协议的第3个版本
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3 协议的接收邮件服务器,用来接收电子邮件的.
POP3服务器使用SSL协议端口号为995 ,非SSL协议端口号110.


Telnet 协议

Telnet 是Internet 远程登录服务的标准协议和主要方式. 在终端使用者的电脑上使用telnet程序,用它连接到服务器.终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行. 要开始一个telnet会话, 必须输入用户名和密码来登录服务器. Telnet是常用的远程控制Web服务器的方法.
Telnet 远程登录服务分为4个过程:

  1. 本地与远程主机建立连接.该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;
  2. 将本地终端上输入的用户名和口令以及输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机. 该过程实际上是从本地主机向远程主机发送一个IP数据包;
  3. 将远程主机输出的MVT格式的数据转化为本地所接受的 格式送回本地终端,包括输入命令回显和命令执行结果;
  4. 最后, 本地终端对远程主机进行撤销连接.该过程是撤销一个TCP连接.

安全隐患: Telnet 是一个明文传送协议,它将用户的所有内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患.因此许多服务器都会选中禁用Telnet服务. 如果我们要使用Telnet的远程登录,使用前影子远端服务器上检查并设置允许Telnet服务的功能.
Telnet基于三个原理: 网络虚拟终端(NVT); 协商原理; 终端和进程的对称观.


DNS域名系统(端口号53)

它作为将域名和IP地址相互映射 的一个分布式数据库,能够使人更方便地访问互联网. 它对每一级域名长度的限制是63个字符,域名总长度则不超过253个字符. 主要包括如下3个组成部分:
(1) 域名空间和资源记录
(2) 域名服务器
(3) 解析器
DNS系统采用递归查询请求的方式来响应用户的查询,
DNS报文格式
从上往下依次是: 标识(同一个问题的查询和响应标识必须相同)—> 标志(0/1,Opcode,主机名授权否,是否截断,是否期望递归,是否可用递归,三个0,Rcode格式错误否)---->问题数----->回答资源记录数------>授权资源记录数---->附加资源记录数; 对于查询报文,问题数通常是1,而其他三项则均为0,响应报文随问题不同而变化
DNS查询段 : 由查询名, 查询类型,查询类三部分组成.
最后一个资源记录: 只出现在响应报文中,它们有一种统一的格式.


RIP协议(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议.

RIP协议位于网络五层模型的应用层,采用距离向量算法,在是否使用中以及较少使用.

ARP协议(Address Resolution Protocol地址解析协议)

它是根据IP地址获取物理地址的一个TCP/IP协议.主机发送消息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保存一定时间.

ARP命令可用于查询本机ARP 缓存中IP地址和MAC地址的对应关系,添加和删除静态对应关系等.

ARP 出现原因
在以太网环境中,数据的传输所依赖的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的.
在局域网中,网络中实际传输的是"帧",帧里面是有目标主机的MAC地址的. 在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址. 但这个目标MAC 地址是如何获得的呢?它就是通过地址解析协议获得的. ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层.
所谓"地址解析" 就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程.
ARP映射方式

  1. 静态映射: 静态映射的意思是要手动创建一张ARP表,把逻辑(IP)地址和物理地址关联起来.这个ARP表储存在网络中的每一台机器上. 这样做有一定的局限性,因为物理地址可能发生变化:
    (1) 机器可能更换NIC(网络适配器), 结果变成一个新的物理地址.
    (2) 在某些局域网中,每当计算机加电时,他的物理地址都要改变一次.
    (3)移动电脑可以从一个物理网络转移到另一个物理网络,这样物理地址也会改变.
  2. 动态映射
    动态映射时,每次只要机器知道另一台机器的逻辑(IP)地址,就可以使用协议找出相对应的物理地址. 已经设计出的实现了动态映射协议的有ARP和RARP两种. ARP把逻辑(IP)地址映射为物理地址. RARP把物理地址映射为逻辑(IP)地址.

W.Richard Stevens在《TCP/IP详解卷一》里面就提到了: 根据TCP/IP协议簇模型中,ARP协议是属于网络层的; 而在OSI模型中ARP协议属于链路层.基于功能来考虑,ARP是链路层协议; 基于分层/包封装来考虑,ARP是网络层协议。(此方法对于ICMP协议同样管用) 我们经常听到的这些术语,包括"网络扫描",“内网渗透”,“中间人拦截”,“局域网流控”,“流量欺骗”,基本上都跟ARP脱不了干系. 大量的安全工具, 例如大名鼎鼎的Cain,功能完备的Ettercap,操作傻瓜式的P2P终结者,底层都要基于ARP实现. ARP是最不安全的协议之一. OSI模型(Open System Interconnection Reference Model, 开放式系统互联通信参考模型) ARP协议就需要用以太网的"广播"功能: 将请求包以广播的形式发送,交换机或WIFI设备(无线路由器)收到广播包时, 会将此数据发给同一局域网的其他所有主机. 广播根据所在层次可分为二层广播和三层广播,根据发生范围可分为本地广播和定向广播. PC1发送的请求广播包同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包。 ARP请求是通过广播方式来实现的,那么,PC2返回ARP回应包,是否也需要通过广播来实现呢?答案是否定的。大部分网络协议在设计的时候,都需要保持极度克制,不需要的交互就砍掉,能合并的信息就合并,能不用广播就用单播,以此让带宽变得更多让网络变得更快。PC2在收到请求之后,就可以将PC1的IP和MAC映射信息存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。