弁言:TCP UDP在OSI的七层模型,属于传输层,在通信行业,在软件开拓行业,都是必须熟知的,那我们怎么去理解这两个呢。

TCP和UDP

TCP和UDP是传输层的两个主要的协议

TCP(Transmission Control Protocol) 传输掌握协议

jspudp图解TCP/UDP道理 CSS

UDP(User Datagram Protocol)用户数据报协议

TCP的紧张特点:

面向连接每一条TCP连接只能是点对点的(一对一)供应可靠交付的做事供应全双工通信面向字节流

UDP的紧张特点:

无连接尽最大努力交付面向报文无拥塞掌握支持一对一、一对多、多对一和多对多的交互通信首部开销小(只有4个字段:源端口、目的端口、长度、考验和)

TCP进行拥塞掌握的算法有4种:

慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)、快规复(fast recovery)

TCP 传送的数据单位协议是 TCP 报文段(segment)。

UDP 传送的数据单位协议是 UDP 报文或用户数据报。

TCP 不供应广播或多播做事。

UDP的首部格式:

源端口:2个字节目的端口:2个字节长度:2个字节考验和:2个字节

什么是端口

硬件端口与软件端口

在协议栈层间的抽象的协议端口是软件端口。

路由器或交流机上的端口是硬件端口。

硬件端口是不同硬件设备进行交互的接口,

而软件端口是运用层的各种协议进程与运输实体进行层间交互的一种地址。

两个打算机中的进程要相互通信,不仅必须知道对方的 IP 地址(为了找到对方的打算机),

而且还要知道对方的端口号(为了找到对方打算机中的运用进程)。

做事器端利用的端口号

熟知端口,数值一样平常为 0~1023。

登记端口号,数值为 1024~49151,为没有熟知端口号的运用程序利用的。
利用这个范围的端口号必须在 IANA 登记,以防止重复。

客户端利用的端口号

又称为短暂端口号,数值为 49152~65535,留给客户进程选择暂时利用。

常见熟知端口:

FTP(File Transfer Protocol)文件传输协议 :21

TELNET远程终端协议:23

SMTP(Simple Mail Transfer Protocol)大略邮件传送协议:25

DNS(Domain Name System)域名系统:53

TFTP(Trivial File Transfer Protocol)大略文件传送协议:69

HTTP(HyperText Transfer Protocol)超文本传送协议:80

SNMP(Simple Network Management)大略网络管理协议:161

SNMP(trap):162

TCP UDP的通信办法

虽然在 UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不须要利用套接字。

TCP 连接的端点不是主机,不是主机的IP 地址,不是运用进程,也不是运输层的协议端口。
TCP 连接的端点叫做套接字 (socket) 或插口。

每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。

TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}

可靠传输的事情事理:停滞等待协议连续ARQ协议

1)“停滞等待”

便是每发送完一个分组就停滞发送,等待对方的确认。
在收到确认后再发送下一个分组。

涌现差错的情形:

在吸收方 B 会涌现两种情形:

B 吸收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
在这两种情形下,B 都不会发送任何信息。

如何担保 B 精确收到了 M1 呢?

办理方法:超时重传

A 为每一个已发送的分组都设置了一个超时计时器。

A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,连续发送下一个分组 M2 。

自动重传要求 ARQ (Automatic Repeat reQuest)。
意思是重传的要求是自动进行的,吸收方不须要要求发送方重传某个出错的分组。

2) 连续ARQ协议:

发送方坚持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不须要等待对方的确认。
这样,信道利用率就提高了。

连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

TCP运输连接建立:

TCP 是面向连接的协议。

运输连接有三个阶段:

连接建立数据传送连接开释

TCP 建立连接的过程叫做三报文握手

A 的 TCP 向 B 发出连接要求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
B 的 TCP 收到连接要求报文段后,如赞许,则 发回确认。
B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack = x + 1,自己选择的序号 seq = y。
A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y +1。
A 的 TCP 关照上层运用进程,连接已经建立。
B 的 TCP 收到主机 A 的确认后,也关照其上层运用进程:TCP 连接已经建立。

数据传输结束后,通信的双方都可开释连接。

TCP 连接开释过程是四报文握手。

数据传输结束后,通信的双方都可开释连接。
现在 A 的运用进程先向其 TCP 发出连接开释报文段,并停滞再发送数据,主动关闭 TCP 连接。
A 把连接开释报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。
B 发出确认,确认号 ack = u +1,而这个报文段自己的序号 seq = v。
TCP 做事器进程关照高层运用进程。
从 A 到 B 这个方向的连接就开释了,TCP 连接处于半关闭状态。
B 若发送数据,A 仍要吸收。
若 B 已经没有要向 A 发送的数据, 其运用进程就关照 TCP 开释连接。
口试题:Tomcat 、Nginx 、Apache的差异?各自的优点是什么?

原创2019-05-28 18:27·老王谈运维

Tomcat 、Nginx 、Apache 的差异? 各自的优点是什么? 什么场景下用得当?

Apache

Apache HTTP做事器是一个模块化的做事器,可以运行在险些所有广泛利用的打算机平台上。
其属于运用做事器。
Apache支持支持模块多,性能稳定,Apache本身是静态解析,适宜静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

Apache相对付Tomcat的优点:

做事器来说处理静态文件是它的上风,速率快。
Apache是静态解析,适宜静态HTML、图片等。

Apache 相对付 Nginx 的优点:

apache的 rewrite 比nginx 的强大;支持动态页面;支持的模块多,基本涵盖所有运用;性能稳定。

缺陷:配置相对繁芜,自身不支持动态页面。

Tomcat:

Tomcat是运用(Java)做事器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

缺陷:可以说Tomcat 只能用做java做事器

优点:动态解析容器,处理动态要求,是编译JSP/Servlet的容器。

Nginx

Nginx是俄罗斯人编写的十分轻量级的HTTP做事器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理做事器,同时也是一个IMAP/POP3/SMTP 代理做事器。

nginx相对付apache的优点:

轻量级,同样起web做事,比apache占用更少的内存及资源;抗并发,nginx 处理要求是异步非壅塞的,而apache 则是壅塞型的,在高并发下nginx 能保持低资源低花费高性能;高度模块化的设计,编写模块相对大略;供应负载均衡

缺陷:Nginx 只适宜静态和反向代理。

运用处景:

反向代理负载均衡HTTP做事器(包含动静分离)正向代理

三者之间的差异:

1)Nginx和tomcat的差异

nginx常用做静态内容做事和代理做事器,直接外来要求转发给后面的运用做事器(tomcat,Django等),tomcat更多用来做一个运用容器,让java web app泡在里面的东西。

把稳:nginx只是把要求做了分发,不做处理!


2)nginx和Apache的差异

Apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。

Nginx轻量级,抗并发,处理静态文件好Apache超稳定,对PHP支持比较检单,nginx须要合营其他后端用,处理动态要求有上风,建议利用前端nginx抗并发,后端apache集群,合营起来。

运用处景剖析:

Tomcat结合Apache、Nginx实现高性能的web做事器

Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web做事器。
它既可以处理动态内容,也可以处理静态内容。
但是,tomcat的最大上风在于处理动态要求,处理静态内容的能力不如apache和nginx,我们可以利用nginx的高并发,低花费的特点与tomcat一起利用。

常日情形下,tomcat与nginx、Apache结合利用,nginx、apache既可以供应web做事,也可以转发动态要求至tomcat做事器上。
常日nginx、apache只供应代理的功能,也便是转发要求至tomcat做事器上,而对付静态内容的相应,则由前端负载均衡器来转发至专门的静态做事器上进行处理。
其架构类似于如下图: