1.端口
可以认为是设备与外界通讯交流的出口。打个比方:好比银行办业务的窗口,1号2号3号。窗内的银行职员是谁不一定,可能今天是小红,明天是小明;窗外办理业务的人今天是张三,明天可能是李四。
可以把端口视作一般编程概念中的接口(interface), 而想 Nginx, apache, tomcat 等等可以认为是这个接口的不同实现(Implementation).
2.ip
一个地址,标志机器设备,服务所在的位置。打个比方:银行的地址,谢安路8号
3.路由
就是URL到函数的映射。可以理解为一个dict,知道key,可以拿到value,这个value就是提供的服务。
服务:这个名词,简单说,一个函数,经过里面乱七八糟的逻辑,然后返回一个值。整个过程就是提供了服务。
4.HTTP 请求
一个链接,包含了ip、端口、服务标志(路由)。
通过这个链接,这个使用该链接提供的功能。
专业术语:
1.端口
在网络技术中,端口(Port)大致有两种意思:
- 物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
- 逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。
按端口号分布划分
- 知名端口(Well-Known Ports)
知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
- 动态端口(Dynamic Ports)
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626、WAY 2.4是8011、Netspy 3.0是7306、YAI病毒是1024等等。
按协议类型划分
按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。下面主要介绍TCP和UDP端口:
- TCP端口
TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。
- UDP端口
UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。
常用端口及其对应服务
21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。
22端口:22端口主要用于SSH(Secure Shell,安全壳协议)服务。
23端口:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。
25端口:25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。
53端口:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。
80端口:80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网) 服务上传输信息的协议。
443端口:443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。
1024端口:1024端口一般不固定分配给某个服务,在英文中的解释是“Reserved”(保留)。
1080端口:1080端口是Socks代理服务使用的端口,大家平时上网使用的WWW服务使用的是HTTP协议的代理服务。
8080端口:8080端口同80端口,是被用于WWW代理服务的,可以实现浏览网页。
在linux系统中,执行:netstat -tln 可查看当前使用的端口
[op_dev@algo-aa wang]$ netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:7991 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 10.19.57.108:10050 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :::* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
tcp6 0 0 :::9100 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::9137 :::* LISTEN
tcp6 0 0 :::5778 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::7992 :::* LISTEN
tcp6 0 0 :::7993 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::18080 :::* LISTEN
tcp6 0 0 :::9445 :::* LISTEN
2.IP:
127.0.0.1和0.0.0.0地址的区别
127.0.0.1 是一个环回地址。并不表示“本机”。0.0.0.0才是真正表示“本网络中的本机”。 在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。
3.HTTP 请求
- 起始行:GET 表示要获取资源,POST 表示向服务器推送数据 (创建或修改资源, 或者产生要返回的临时文。请求目标 (request target),通常是一个URL,或者是协议、端口和域名的绝对路径,通常以请求的环境为特征。
- HEAD:与GET方法一样,都是向服务器发出指定资源的请求。
- POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)
- PUT:向指定资源位置上传其最新内容。
4.路由
URL到函数的映射。
router和route的区别
route就是一条路由,它将一个URL路径和一个函数进行映射,例如:
/users -> getAllUsers()
/users/count -> getUsersCount()
这就是两条路由,当访问 /users 的时候,会执行 getAllUsers() 函数;当访问 /users/count 的时候,会执行 getUsersCount() 函数。
而 router 可以理解为一个容器,或者说一种机制,它管理了一组 route。简单来说,route 只是进行了URL和函数的映射,而在当接收到一个URL之后,去路由映射表中查找相应的函数,这个过程是由 router 来处理的。一句话概括就是 "The router routes you to a route"。
服务器端路由
对于服务器来说,当接收到客户端发来的HTTP请求,会根据请求的URL,来找到相应的映射函数,然后执行该函数,并将函数的返回值发送给客户端。对于最简单的静态资源服务器,可以认为,所有URL的映射函数就是一个文件读取操作。对于动态资源,映射函数可能是一个数据库读取操作,也可能是进行一些数据的处理,等等。
参考:
1.端口的作用: https://my.oschina.net/goldenshaw/blog/4530069
2.IP:https://juejin.im/post/6844903886629634061