OSI七层参考模型 TCP与UDP、IP、ICMP 如何编写Socket套接字? 端口号

2024-03-18 02:18

本文主要是介绍OSI七层参考模型 TCP与UDP、IP、ICMP 如何编写Socket套接字? 端口号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

物理层:在信道上传输原始比特流;

数据链路层:主要任务是加强物理层传输原始比特流的功能,使之对应的网络层显现为一条无错线路。发送包把输入数据封装在数据帧,按顺序传送出去并且处理接收方回送的确                      认信。

网络层:关系子网的一个运行控制,其中一个关节的问题是确认从源端到目的段如何选择路由。       路由选择,拥塞控制与网络互连

传输层:从会话层接受数据,并且把其分成较小的单元传递给网络层。

会话层:允许不同机器上的用户建立会话关系。

表示层:完成某些特定的功能。

应用层:包含大量人民普遍需要的协议。

应用层  http smtp pop3 telnet snmp ftp dhcp tftp ssh 
传输层  tcp udp  spx  
网络层  ip ipx  ‘apple talk’
数据链路层  802.3、802.4、802.5、802.11、FDDI、ATM
物理层 v.24 v.35 RS232 RS485

传输协议有两种UDP和TCP

//


TCP: TCP连接像打电话,传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数居前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能从一段传到另外一段。

UDP:是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传递给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传递数据报前不用在客户和服务器之间建立一个连接,且,没有超时重发等机制,故而传输速度快。


一、TCP与UDP的优缺点

①TCP传输控制协议,提供的是面向连接可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输。对可靠性要求较高的应用层协议,如FTP、Telnet、SMTP、HTTP、POP3

②UDP用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。对实时性要求较高的应用层协DNS、SNMP、QQ

③表格对比:

TCP
UDP
是否面向连接
面向连接
无连接
数据传输可靠性
可靠的
不可靠的
应用场合
传输大量的数据
少量数据
速度

 




IP:而IP是给因特网的每一台联网设备规定一个地址;

ICMP: (因特尔控制消息协议)

ICMP与IP位于同一层, 它被用来传送IP的控制信息。 它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。


SNMP协议

SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。


如何编写Socket套接字?


如果你要编写一个服务程序,先调用Socket()创建一个套接字,调用bind()绑定IP地址和端口,

然后启动一个死循环,循环中调用accept()接受连接;

对于每一个接受的连接,可以启动多线程方式进行处理,在线程中调用send()、recv()发送和接受数据,


如果你写一个客户端程序:

先调用socket()创建一个套接字,

然后调用connecct()连接服务器,

之后调用send()、recv()发送和接受数据了。

服务器段程序编写:

1,调用ServerSocket(int port ) 创建一个服务器端套接字,并绑定到指定端口上。

2,调用accept(),监听连接请求,则接受连接,返回通信套接字。

3,调用Socket类的getOutStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接受。

4,关闭通信套接字Socket.close()。

客户端程序编写:

1,调用Socket()创建一个流套接字,并连接到服务器段。

2,调用Socket类的getOutStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接受。

3,关闭通信套接字Socket.close().


在服务端,我们需要大致按照以下步骤:   

1.初始化socket库。
2.绑定本机地址和端口。(服务端特有)
3.监听端口,等待客户端连接。
4.当有客户端连接,进行处理,但后继续监听或者结束程序。
5.退出程序,关闭socket,终止对socket库的使用。


在客户端,我们需要按照以下步骤:

1.初始化socket库。
2.设置远程主机的地址和端口信息,并连接。
3.等待服务端的响应
4.当服务端响应,进行处理。
5.退出程序,关闭socket,终止对socket库的使用。


下面引用一张来自网络的图片,直观的说明通信的过程。
 






80端口用于网页浏览;HTTP

FTP服务的21端口

25端口简单邮件传输协议;

135端口分配给RPC(远程过程调用)服务;

动态端口1024~15535;

TCP端口:Telnet服务的23端口 25   80

UDP端口:DNS服务的53端口、SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口;




这篇关于OSI七层参考模型 TCP与UDP、IP、ICMP 如何编写Socket套接字? 端口号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820884

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不