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

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到

用Python编写倒计时程序:详细教程

目录 引言 环境准备 基本概念 代码实现 步骤一:导入必要的库 步骤二:获取用户输入 步骤三:实现倒计时逻辑 步骤四:整合代码 运行程序 高级功能 扩展功能示例:支持分钟和小时输入 扩展功能示例:图形用户界面 (GUI) 总结 引言 倒计时程序是一个非常常见的小工具,广泛用于各种应用场景中,例如考试时间提醒、烹饪计时器、会议倒计时等。Python 作为一种

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。