Linux 端口 为什么要有端口
ip能锁定一台物理机器,对应着一张网卡,外界发来的数据包网卡都会接收。但是问题来了,网卡给程序提供了接口,你监听一下我,要是有消息来了,我就转发给你。这样应用程序就能收到数据了。但是问题来了,程序A和程序B都需要监听网卡接发数据,网卡说那我把接到的数据都发给你两,你们自己看着办吧。好,小A小B都接受了。但是又来了CDEF......,不行了,每个包都被发到了所有应用程序,每个应用程序都累得不行,最终垮了。
好,那网卡说我给你们加个表示吧,我们之间可以用一个号码来作为标识,我和小A之间就用1来标识,如果外界发给1号标识的数据我就转发给你,你监听我的时候得告诉我你监听的时1,我就转发1的数据包给你。好了其他的BCD...都自己弄一个标识号,只要不重复就行。这样大家都省事了。
最后设计到安全,一个标识号只能被一个应用程序监听,因为如果小A程序和小B同时监听一个标识号号,那就坏了,我传的数据都被AB接到,这样数据安全性就没办法保证了。
这个标识号就是端口,最初设计网络数据交换的设计者不知道是怎么想的。这是我的理解。
其实网卡都是被系统层封装了,端口和进程之间的关系也是系统封装好的。我们只需要用socket就行,给定一个端口号就行了。其他的事都交给操作系统去做。
文字性的描述就是:
端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口。端口是操作系统可分配的一种资源;应用程序通过系统调用与某端口绑定后,传输层传给改端口的数据都被相应进程接收,相应进程发给传输层的数据都通过端口输出。
为什么需要端口这个概念呢?在网络通信过程中,需要唯一识别通信两端的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过 进程号进行识别。进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前不知道自己的进程号,如果需要运行后再广播进程号则很难 保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用公共服务,如HTTP和FTP等。
这就是我的理解,希望大家指正拍砖。
Linux 端口 为什么要有端口的更多相关文章
- linux下查看进程占用端口和端口占用进程命令
Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...
- 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等
一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...
- Linux下Socket编程的端口问题( Bind error: Address already in use )
Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...
- 怎样在linux或者Unix上检查端口是否在使用
英文原文链接:https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/ Question 1: 怎样在lin ...
- linux 用tcpdump查看80端口访问有哪些IP
linux 用tcpdump查看80端口访问有哪些IP: tcpdump -i eth0 -tnn dst port 80 -c 1000|awk -F"." '{print $1 ...
- Linux或Windows上实现端口映射
通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能. 一.Windows下实现端口映射 1. 查询端口 ...
- Linux及Windows查看占用端口的进程
想必大家在部署环境启动服务的时候,会遇到服务起不起来的问题,看日志,说是端口被占用了. 有的时候,我们不想改端口,那么,就需要去查看到底是哪个应用把这个端口给占用了,然后干掉它即可. 下面分别列举li ...
- Linux 修改linux的SSH的默认端口
修改linux的SSH的默认端口 by:授客 QQ:1033553122 安装完linux后,默认的情况下ssh是开放的,容易造到黑客攻击,简单有效的操作之一就是修改默认端口号 步骤一:修改/et ...
- Linux中jar包指定端口启动并记录日志
Linux中jar包指定端口启动并记录日志: java -jar -Dserver.port=38080 group-buying-0.0.1-SNAPSHOT.jar >log.log ...
- Linux 通过进程Pid与端口互查
ps -aux 状态详解 https://blog.csdn.net/whatday/article/details/54409387. linux下通过进程名查看其占用端口: https://www ...
随机推荐
- # Nginx设置浏览器缓存
配置语法 在location或if段里,来写. 格式 expires 30s; expires 30m; expires 2h; expires 30d; (注意:服务器的日期要准确,如果服务器的日期 ...
- 生成jsp验证码的代码详解(servlet版)
package util; import java.util.*; import java.io.*; import java.awt.*; import java.awt.image.*; impo ...
- Vue初级-样式
整个网页不仅有标签还有css进行渲染,所以,现在讲讲在vue里面加入你想加的css. 在不用vue的时候,有一种内联方式加入css(大概是<div style="..."&g ...
- Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ ...
- php数据库批量删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 编译带加密功能的sqlite
以为编译wxsqlite是很难的事情,竟然这么顺利. 1.下载wxsqlite代码,解压(wxcode.sourceforge.net/components/wxsqlite3/) 2.下载Prema ...
- 【汇编】MASM6.15几个简单的汇编程序
/***************通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上*****************/ DATAS SEGMENT ;此处输入数据段代 ...
- MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码)
MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...
- sql server 查询数据判断为空
and xxx is NOT null and xxx is null
- count(*)实现原理+两阶段提交总结
count(*)实现原理 不同引擎的实现: MyISAM引擎把表的总行数存在了磁盘上,执行COUNT(*)就会直接返回,效率很高: InnoDB在count(*)时,需要把数据一行一行的从引擎里面取出 ...