如何实现网络数据传输

这篇具有很好参考价值的文章主要介绍了如何实现网络数据传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

1.理解源IP地址和目的IP地址

2.理解端口号

2.1端口号与进程pid的关系

2.2源端口号和目的端口号

3.协议

3.1TCP协议

3.2认识UDP协议

4.网络字节序

5.socket编程接口

总结


前言

        在上一篇文章网络框架中给大家对网络的整体进行了一个宏观的介绍,这篇文章中我们进一步来看看两台主机是如何实现网络数据通信的。

1.理解源IP地址和目的IP地址

        在实现不同主机通信的时候首先需要知道对方的IP地址,就如同是唐僧从东土大唐向西天取经,东土大唐可以理解为是源IP地址,而西天可以理解为是目的IP地址,每一台主机实现数据通信的前提是需要有IP地址。

如何查看自己主机上的IP地址:ifconfig

2.理解端口号

        当我们有了对方的IP地址之后,经过中间的不断路由此时到达了对方的主机,但这样就能够实现数据通信了吗?答案是数据到达对方的主机只是完成了第一步,并没有真正完成数据通信,就如同是唐僧到达西天并没有取到经,要想真正取到经是要去大雷音寺的,所以数据到达主机之后,真正通信的是主机上的进程,所以如果找到主机上的进程呢?

为了标识进程的唯一性,在网络通信中提出了端口号的概念,用端口号唯一找到一个进程。此时,有了IP地址加上端口号,就可以在全网上标识一个唯一的进程了,进而在网络数据通信的时候就可以准确的实现数据传输了。

2.1端口号与进程pid的关系

        端口号的是一个2字节16位的整数,标识主机上的一个进程,此时可能会有细心的小伙伴会想,既然端口号是唯一的标识主机上的一个进程,那进程的pid不就是唯一标识一个进程的吗?为什么还要引入端口号呢?为什么不直接复用pid呢?

        答案是在技术上这种方案是可以的,但是引入端口号的原因是也是考虑了以下几个原因:

a.为了网络与系统解耦

b.一般服务器的端口号是不能轻易改变的,进程在退出后,重启再次启动该进程,进程的pid就发送改变了

c.不是所有的进程都会进行网络服务和请求,但是所有的进程都需要有pid

底层操作系统是如何根据port找到找到对应的进程?

操作系统为port维护了一个hash表作为key值,而value是进程PCB

注:一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;

2.2源端口号和目的端口号

        在理解了端口号之后,所谓的源端口号就是数据是发送方主机的哪一个进程发的,而目的端口号就是接受方主机的哪一个进程。

3.协议

        在上一篇文章中我们介绍了实现网络数据通信必须要遵守协议约定,在今天对协议可以进一步明确,有了IP地址和port端口号,为实现数据通信提供了技术支持,那在实现双方通信的时候需要告诉对方自己的IP地址和port端口号呢?答案是显然需要的,那如何告知对方呢?

就需要使用协议了,在发送数据的时候协议报头中填充对应的IP地址和port端口号这些字段。

在这里我们主要介绍两种协议,一种是TCP协议,一种是UDP协议。

3.1TCP协议

此处先对TCP(传输控制协议)有一个直观的认识; 后面我们再详细介绍。

传输层协议
有连接
可靠传输
面向字节流

3.2认识UDP协议

此处我们也是对UDP(用户数据报协议)有一个直观的认识; 后面再详细讨论.

传输层协议
无连接
不可靠传输
面向数据报

注:关于TCP协议和UDP协议的具体细节在后面进行介绍,看完上面的简单介绍,相信大家有一个直观的认识TCP是可靠传输而UDP是不可靠传输,可能好奇的小伙伴就会问,既然是不可靠传输,那为什么还保留呢?用可靠传输不是更好吗?

答案是关于可靠和不可靠在网络这里是一种中性词,不是说可靠就一定好,而不可靠就一定不好关于可靠和不可靠是根据不同的场景决定的。可靠的实现是有一定成本的,在维护和编码上是比较复杂的,而不可靠就意味着在维护和编码上更加简单。在网络数据传输的过程中不允许出现数据丢失的情况此时就可以采用TCP协议,但是在数据传输的过程中允许有一些报文丢失,就可以使用UDP

4.网络字节序

        有了上面的技术支持,我们就可以实现双方数据通信了,接下来就需要考虑数据在具体发送时的一些问题,前面我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?

发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.
不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

如何实现网络数据传输,网络

 使用说明:

h表示host,n表示network,l表示32位长整数,s表示16位短整数。
htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;
如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

5.socket编程接口

        作为程序员,实现网络数据通信我们只需要关心应用层的开发,关于传输层和网络层是由OS帮我们维护的,既然底层是由OS系统维护的,我们必然要调用操作系统为我们提高的接口,下面我们就来一起认识一下网络编程中所使用的接口

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

关于每个接口的具体参数我们在后面编码的时候再进行介绍,在这里我们主要介绍一下struct sockaddr*,很明显这是一个结构体,那这个结构体具体是什么呢?

关于socket编程主要分为三类

a.网络套接字编程

b.原始套接字

c.unix域间套接字

第一种可以实现跨主机和本地通信

第二种可以可以直接绕过传输层和网络层,直接访问数据链路层,主要是用于抓包工具的实现

第三种是实现本地通信

关于这三种方式在后续中主要介绍网络套接字编程。此处虽然有三种通信方式,但是显然在上面我们只介绍了一套接口,那他们都适用吗?答案是适用,那是如何做到的呢?

在使用的时候传递不同的结构体,初始时为struct sockaddr,如果是网络套接字编程就强转为struct sockaddr_in,如果是unix域间套接字就强转为sockadd_un

如图所示:

如何实现网络数据传输,网络

总结

        有了上面知识之后,接下来我们就可以编码完成实现不同主机数据通信,关于如何编码完成,将在下一篇文章中为大家介绍。文章来源地址https://www.toymoban.com/news/detail-641618.html

到了这里,关于如何实现网络数据传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何通过安全数据传输平台,保护核心数据的安全传输?

    在数字化的浪潮中,企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂,传统的数据传输方式已不再安全,这就需要我们重视并采取有效的措施,通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括: 1.网络带宽限制:企业的网络带宽

    2024年04月28日
    浏览(31)
  • 【数据加密、解密】前后端数据传输的过程中,如何进行数据加密传输,保证数据的传输安全,防止被他人窃取

       前端进行参数传递的时候 ,有些数据为了安全起见还是需要加密传输的,比如用户密码,比如登录的时候,注册的时候,用户输入的密码,如果明文进行传输还是不太安全的,所以一般可以进行加密后传递到后端。 那么就有这几个问题: ·前端如何进行加密 ·后端如何进

    2024年02月07日
    浏览(39)
  • CIAA 网络安全模型 — 数据传输安全

    2024年02月03日
    浏览(30)
  • 如何保证数据传输的安全?

    要确保数据传输的安全,您可以采取以下措施: 使用加密协议:使用安全的传输协议,如HTTPS(HTTP over SSL/TLS)或其他安全协议,以保护数据在传输过程中的安全性。加密协议可以有效防止数据被窃听或篡改。 强化身份验证:确保建立安全连接的双方都经过身份验证。使用密码

    2024年02月11日
    浏览(28)
  • 【计算机网络笔记】传输层——可靠数据传输之流水线机制与滑动窗口协议

    什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率 计算机网络体系结构概念 OSI参考模型

    2024年02月06日
    浏览(29)
  • 哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理

    哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:TCP协议 哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 什么是可靠? 不错、不丢、不乱 可靠数据传输协议 可靠数据传输对应用层、传输层、链路

    2024年02月12日
    浏览(34)
  • gRPC如何保障数据安全传输

    gRPC 是由 Google 开发的高性能、开源的 RPC(Remote Procedure Call)框架,用于在客户端和服务器之间进行通信。它基于 Protocol Buffers(protobuf)进行消息序列化和反序列化,支持多种通信协议,如 HTTP/2、TCP 和 gRPC 提供的协议。 在现代网络环境中,数据的安全性至关重要。特别是在

    2024年02月16日
    浏览(39)
  • TCP是如何传输数据的?

    做IT相关的工作,肯定都离不开网络,网络中最重要的协议是TCP。无论是实际工作还是笔试面试,你看哪里能少得了TCP?我考过RFC中与TCP相关的文档,也看过Linux中与TCP相关的源码,也看过不少框架中的TCP相关的代码,对TCP是有点感觉了。 一直想找个时间来分享下TCP相关的知

    2024年02月08日
    浏览(27)
  • udp如何传输大数据附udp高速传输技术解决方案

    当遇到UDP传输大数据时,首先需要考虑使用专业的大数据传输软件或工具来满足UDP传输大数据的需求。其次,需要对UDP大数据传输的各个方面进行分析和优化,以确保传输的快速、安全、稳定和高效。 UDP(用户数据报协议)是网络上最常用的数据传输方式之一。通常在讨论中

    2024年02月15日
    浏览(35)
  • 【网络编程】深入了解UDP协议:快速数据传输的利器

    (꒪ꇴ꒪ ),Hello我是 祐言QAQ 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍 快上🚘,一起学习,让我们成为一个强大的攻城狮! 送给自己和读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,请在评论区指

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包