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

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J