当前位置: 首页 > news >正文

上海城乡住房建设厅网站梅河口网站建设

上海城乡住房建设厅网站,梅河口网站建设,山西省网站,网站做友链盈利目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路#xff1a; 唐僧的出发地到目的地#xff1a;东…目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路 唐僧的出发地到目的地东土大唐 - 西天。唐僧的长途跋涉途中东土大唐 - …… - 车迟国 - 黑风岭 - …… -西天。源IP - 目的IP是永远都不会改变的。源MAC - 目的MAC会根据当前所处的位置不断的进行变化。 目的MAC是受目的IP的影响的以此到达目地的IP。 认识端口号 我们所使用IPV4在经过互联网的大爆发人人拥有上网设备甚至是几个上网设备而公司之类的也需要配IP。仅仅IPV4的32位字节肯定是远远的不够的而现在之所以还能正常的使用。原因是存在一种技术叫做NAT技术其划分了对应的局域网和公网。 而不论是在什么网段在各自的特定网段当中IP都要表示该对应主机的唯一性。 #问把数据送到对方的机器上是目的吗 不是的就如同我们在使用一个app的时候如抖音其所播放的视频内容是经过网络申请然后抖音的服务器将视频内容数据发送给抖音app那么为什么不是发送给淘宝app偏偏就是要发送给抖音app就是因为是软件客户端抖音申请的数据然后将数据申请通过给我们的主机让主机手机帮它去申请所以数据到主机都还是没有结束的。 主机(手机)上层的软件客户端在跑。服务器上层的服务器软件在跑。所以通讯的时候并不是两个机器在通讯而是二者上层的软件在通讯。而对应的软件就是程序员所写的对应的代码编译所形成的二进制程序。所以准确的来说因为客户端也是需要打开才哪能申请数据、接收数据。 对于上面的问题不是的真正的网络通信过程本质上其实是进程间通信将数据在主机间转发仅仅是手段一般在网络通讯的时候真正网络通讯的本质是进程间通讯但是因为跨主机了所以我们需要将数据先在主机间进行通讯机器收到之后需将数据交付给指定的进程 #问将数据教给对应的主机之后如何保证的主机可以将对应的数据交付给特定的进程  利用端口号 端口号 端口号port是传输层协议的内容。端口号是一个2字节16位的整数。端口号用来标识一个进程告诉操作系统当前的这个数据要交给哪一个进程来处理。IP地址 端口号能够标识网络上的某一台主机的某一个进程。一个端口号只能被一个进程占用。端口号是标识特定主机的上的网络进程的唯一性即端口号在特定的主机上有若干个进程端口号不能够被同时绑定只能够被一个进程进行关联。 所以任何一个发出的报文一定有IPport端口号。 #问在Linux的进程中有一个进程PID进程PID也标定了进程的唯一性那进程PID与端口号的关系是什么 重点是他们标识进程唯一性的能力进程PID是进程管理的范畴如果网络也使用进程PID来标识唯一性那么网络的模块和进程管理的模块就黏在一起了就会导致两个毫不相关的模块产生关联这是没有任何意义的单独实现一个端口号提供给网络模块使用实现网络模块与其他的模块的解耦。 并且不是所有进程都需要端口号但是是一定所有进程都需要进程PID。 #问一个进程可以和多个端口号绑定吗 一个进程可以和多个端口号绑定我们想绑定几个就绑定几个都没有任何问题。只要一个端口号只能和一个进程关联即可。 理解源端口号和目的端口号 为了让我们进行更好的数据通信客户端有自己的端口服务端也有自己的端口。客户端向服务器发送消息客户端的端口叫做源端口服务端的端口叫做目的端口。如果是服务端向客户端发数据客户端的端口叫做目的端口服务端的端口叫做源端口。 谁发数据谁就是源谁收数据谁就是目的。 套接字 SRC_IP标定互联网中的唯一的一台主机。SRC_PORT标定主机中唯一的进程。套接字SRC_IP  SRC_PORT。 网络通讯的本质进程间通信套接字编程。 认识TCP与UDP协议 传输层是处于操作系统的并且是离上层应用层最近的应用层所使用的接口都是TCP协议 / UDP协议提供的。 认识UDP协议 对UDPUser Datagram Protocol 用户数据报协议一个直观的认识。传输层协议 无连接 —— 不用写代码的时候刻意连接直接发送数据不可靠传输 —— 可能会出现网络丢包的问题 / 数据包重复乱序等问题面向数据报 认识TCP协议 对TCPTransmission Control Protocol 传输控制协议一个直观的认识。传输层协议 有连接—— 写代码的时候需要刻意连接 可靠传输 面向字节流UDP协议就如同发短信无需经过对方的同意直接发送即可。TCP协议就如同打电话需要经过对方的同意不能直接进行通话需要对方接听。 #问为什么UDP协议不可靠却还是要选择UDP协议 现在的网络中出现丢包的问题概率不大即便出现了丢包问题有些场景下也是可以容忍的更重要的是不可靠是特点可靠也是特点但是不可靠看起来像缺点但是它的反面就是没有为了让对应的程序变得可靠而做了更多得工作。可靠性是需要付出大量的编码和数据得处理的设置更多的策略更复杂。 TCP协议就是什么都要管而UDP协议就是只要将数据发出去了就行了。一个更安全一个更简单。在日常编写中除非十分的适合UDP协议其余情况都是使用TCP协议。比如视频、直播等在播放的时候出现声音丢失一下、卡一下就有可能是使用UDP协议而出现的丢包的情况。 网络字节序 我们已经知道内存中的多字节数据相对于内存地址有大端和小端之分磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分网络数据流同样有大端小端之分。 什么是大端小端        大端存储模式是指数据的低位保存在内存的高地址中而数据的高位保存在内存的低地址中。         小端存储模式是指数据的低位保存在内存的低地址中而数据的高位保存在内存的高地址中。 #问那么如何定义网络数据流的地址呢 首先我们需要知道两天主机如果大小端不一致经过网络通讯时必然会导致双方无法正常的通信。 解决这个问题猜测做法 无论是A - B发B - A发都把自己的大小端信息特征带上对方主机提取数据时就先对大小端特征 —— 也很逗因为大小端特征也是对应的存储怎么识别 于是网络就直接规定了 网络规定所有的网络数据都必须是大端 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出。接收主机把从网络上接到的字节依次保存在接收缓冲区中也是按内存地址从低到高的顺序保存。因此网络数据流的地址应这样规定先发出的数据是低地址后发出的数据是高地址。 TCP/IP协议规定网络数据流应采用大端字节序即低地址高字节。不管这台主机是大端机还是小端机都会按照这个TCP/IP规定的网络字节序来发送/接收数据。如果当前发送主机是小端就需要先将数据转成大端。否则就忽略直接发送即可。为使网络程序具有可移植性使同样的C代码在大端和小端计算机上编译后都能正常运行可以调用以下库函数做网络字节序和主机字节序的转换。 hhostnnetworkl32位长整数s16位短整数。h开头代表主机转网络例如htonl表示将32位的长整数从主机字节序转换为网络字节序例如将IP地址转换后准备发送。 如果主机是小端字节序这些函数将参数做相应的大小端转换然后返回。如果主机是大端字节序这些函数不做转换,将参数原封不动。 socket编程接口 socket 常见API // 创建 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); 常见的套接字 域间socket —— 本主机内的进程间通信也称作基于套接字式的管道通信。原始socket —— 通常用于编写很多很多的工具一般我们在应用层写代码用的是传输层接口原始socket允许我们绕过传输层直接使用网络层甚至使用网络层以下的底层。网络socket因为套接字的不同所以理论上是三种应用场景对应的应该是三套接口。但是Linux在设计的时候不想设计过多的接口于是就将所有的接口进行了统一。 sockaddr结构 socket API是一层抽象的网络编程接口适用于各种底层网络协议如IPv4、IPv6以及后面要讲的UNIX Domain Socket。然而各种网络协议的地址格式并不相同。 #sockaddr结构的出现。 在上述图中以及前面将常见的三种套接字的介绍套接字不仅需要支持跨网络的进程间通信还需要支持本地的进程间通信域间socket。在进行跨网络通信时我们需要传递的端口号和IP地址所以就是必须使用上述的 struct sockaddr_in 结构体。而本地通信域间socket则不需要因此使用上述的 struct sockaddr_un 结构体其中类型对应的不同涉及的参数最终导致的是需要两个接口。就是因为 struct sockaddr_in 结构体是用于跨网络通信的而 struct sockaddr_un 结构体是用于本地通信的是不同的。         所以为了让套接字的网络通信和本地通信能够使用同一套函数接口于是就出现了 struct sockaddr 结构体该结构体与 struct sockaddr_in 和 struct sockaddr_un 的结构都不相同但这三个结构体头部的16个比特位都是一样的叫做地址类型就是表明其是网络通信的套接字还是本地通信的套接字。         可以说 struct sockaddr 很像一个基类 struct sockaddr_in 和 struct sockaddr_un 是其的派生类。所以我们的传递完全可以传递 struct sockaddr 最终是什么结构体完全看完全看结构体头部的16个比特位的对应。 总结 IPv4和IPv6的地址格式定义在netinet/in.h中IPv4地址用sockaddr_in结构体表示包括16位地址类型16位端口号和32位IP地址。 IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6。这样只要取得某种sockaddr结构体的首地址不需要知道具体是哪种类型的sockaddr结构体就可以根据地址类型字段确定结构体中的内容。 使用socket API可以都用struct sockaddr *类型表示但在使用的时候往往需要强制转化成sockaddr_in。这样的好处是程序的通用性可以接收IPv4IPv6以及UNIX Domain Socket各种类型的sockaddr结构体指针做为参数。
http://www.w-s-a.com/news/491930/

相关文章:

  • 商务网站开发设计结论微信报名小程序怎么制作
  • 网站建设销售简历wordpress七比2
  • 制作网站报价工程项目查询哪个网站
  • 深圳移动网站建设制作公司网站建设的认识
  • 网站建设脚本语言有哪些想开网店哪个平台好
  • 视频网站用什么做的好深圳的小程序开发公司
  • 南京网站定制开发商城网站免费模板
  • 青海学会网站建设公司照片组合拼图
  • 中国建设银行福清分行网站爱站网权重查询
  • 外贸通网站建设网站建设7个主要流程图
  • 元气森林网络营销方式医疗网站优化怎么做
  • 手机网站制作报价表做网站公司做网站公司
  • 湖州网站设计吉林网站建设哪家好
  • 做存储各种环境信息的网站使用tag的网站
  • 阿里云用ip做网站网站开发员属于
  • 外链网盘下载南宁seo推广优化
  • 网站的推广方案有哪些此网站可能有
  • wordpress更改链接后网站打不开一键生成个人网站
  • 网站建设后台有哪些东西前端开发培训一般多少钱
  • 高端建设网站公司网站开发 源码
  • 企业网站的劣势园林景观设计公司简介范文
  • 网站建设程序招聘东营建设信息网登录
  • o2o是什么意思通俗讲seo与网站优化 pdf
  • 外贸网站外包一般建设一个网站多少钱
  • 抄袭别人网站的前端代码合法吗网络促销策略
  • 用wordpress制作网站做资源网站
  • wordpress 发布网站南宁网站建设网站
  • 职业生涯规划大赛心得贵阳哪家网站做优化排名最好
  • wordpress 图片懒加载北京网站优化和推广
  • 深圳网站建设工作一个dede管理两个网站