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

建网站 找个人找做网站的公司

建网站 找个人,找做网站的公司,创造力网站设计,企业文化宣传策划方案目录 一#xff0c;认识端口号 1.1 背景 1.2 端口号是什么 1.3 三个问题 二#xff0c;认识Tcp协议和Udp协议 三#xff0c;网络字节序 四#xff0c;socket编程接口 4.1 socket常见API 4.2 sockaddr结构 一#xff0c;认识端口号 1.1 背景 问题#xff1a;在进…目录 一认识端口号 1.1 背景 1.2 端口号是什么 1.3 三个问题 二认识Tcp协议和Udp协议 三网络字节序 四socket编程接口 4.1 socket常见API 4.2 sockaddr结构 一认识端口号 1.1 背景 问题在进行网络通信的时候是不是我们的的两台机器在通信呢 解答我们把软件下载下来安装好但是不打开不耗费流量只有当我们打开它加载的时候才会耗流量。所以网络通信的时候本质是应用层在通信 网络协议的下三层网络层传输层数据链路层主要解决数据安全可靠地被送到远端机器用户使用应用层软件完成数据地发送和接收而软件要进行通信就要先启动起来而启动一个软件也就是进程创建所以日常我们网络通信的本质就是“进程间通信”两个进程间要通信就是让两个进程看到同一份资源这个资源就是网络而这个网络再具体一点就是网络协议栈 问题 当传输层即将把数据交给应用层时但是此时应用层有很多应用它咋知道要把数据交给哪个应用呢 解答所以上层要和传输层达成一种方案让数据能够准确地交给上层这个方案叫做“端口号” 1.2 端口号是什么 端口号是传输层协议的内容是一个2字节16位的整数就是4个数字它用来标识一个进程告诉操作系统当前这个数据从传输层要交给应用层的哪一个应用 端口号无论对于客户端还是服务器都能唯一地标识该主机上的一个网络应用层的进程这点类似于进程的PID一个端口号只能被一个进程占用在公网上ip地址能表示唯一的一台主机端口号port用来标识该主机上的唯一一个进程所以 ip  port 标识全网唯一的一个进程。所以客户端和服务器都要有自己的ip和port这种基于ip port 的通信方式我们叫做socket后面会讲 1.3 三个问题 问题端口号和我们的进程pid有什么区别两者似乎都能标识该主机上进程的唯一性那为什么不用pid要用端口号 解答 不是所有的进程都需要网络通信但是所有进程都要有pid -- 告诉我们网络是需要单独设计的实现端口号是为了实现系统和网络的功能解耦因为系统可能会变当两者分开设计后一方收影响就不会影响对方或者对对方的影响大大降低 问题服务器和客户端是如何知道对方的端口号的 解答 首先是客户端如何知道服务器端口号的 服务器和端口号都是同一家公司开发的所以要想客户端知道端口号那么这个端口号必须是众所周知的精心设计的被客户端知晓的这个一般由开发商做的安装的时候将端口号或者ip直接内置进去了 然后是服务器如何知道客户端端口号的 每次请求都是客户端主动发起的所以让服务器知道客户端端口号是比较容易的 问题传输层是如何根据端口号讲数据准确交给应用层众多进程中的那一个对应进程的 解答 操作系统会在传输层给我们形成一张哈希表里面存的都是各个进程PCB的指针首先进程绑定端口号的时候就根据哈希算法找到对应位置如果这个位置没有PCB指针就把该进程的PCB指针存进去当把PCB指针放进哈希表时就可以认为该进程绑定了端口号然后客户端的报文到了服务器的传输层时传输层就拿着报文中的端口号在哈希表里做哈希运算找到哈希表对应位置的进程PCB指针进而找到对应进程完成传输层将数据交给应用层的某个具体进程一个进程可以绑定多个端口号但是一个端口号只能绑定一个进程因为哈希表是这样规定的比如哈希表多个位置可以放同一个指针但是同一个位置只能放一个指针 二认识Tcp协议和Udp协议 网络协议栈是贯穿整个体系结构的在操作系统层应用层和驱动层都有自己的协议。而离我们普通程序员最近的就是使用系统调用接口实现网络通信了所以离我们最近的就是传输层传输层应用最广泛最受欢迎的两种协议就是TCP协议和UDP协议了 TCP协议 Tcp传输控制协议Transmission Control Protocol是一种面向连接的可靠的基于字节流的传输层协议。 如果两台主机想通过Tcp进行数据通信那么必须先建立好连接道路并确保建立成功后才进行数据传输同时Tcp协议也是保证数据传输可靠的协议数据在传输过程中如果出现了丢包乱序等情况Tcp协议都有对应的解决方法具体我们后面再讲 UDP协议 UDP用户数据报协议User Datagram Protocol是一种无需建立连接不可靠的面向数据报的传输层协议 如果两台主机要使用Udp通信无需建立连接一方根据IP和端口直接就将数据发送给对方这也就意味着Udp协议是不可靠的中途出现丢包乱序等情况Udp都不会去处理 问题Tcp比Udp可靠那为啥传输层要这两种协议同时存在呢 解答  其实这里的“可靠”和“不可靠”都是中性词无褒贬含义就和化学里的“惰性”一样只是描述某个东西的物理特征并不是说这个物理懒之类的保证可靠是需要成本的而相反不可靠相反的就是简单TCP在比如说银行转账微信支付的时候底层必须是TCP协议而UDP通常在直播信息流视频流做数据大量派发的场景有用TCP虽然是可靠传输但并不是万能的它是保证在网络连通且链接较强的时候处理一些数据丢失问题也就意味着Tcp的传输效率是没Udp高的Tcp会在底层做更多的工作 三网络字节序 计算机在存储数据时是有大小端的概念的 大端数据的高字节内容保存在内存的低地址处低字节保存在内存的高字节处小端数据的低字节内容保存在内存的低地址处高字节保存在内存的高字节处 如果编写的程序只在本地机器上运行那么是不需要考虑大小端转换的问题的但是到了网络通信时是两台主机在进行进程间通信了那么这两台主机采用的存储方式可能不一样比如大端机器传数据给小端机器那么小端机器解析出来的数据就和大端机器是不一样的 所以我们解决上面的问题为此TCP/IP 协议 规定网络数据流都要采用大端字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出。接收主机把从网络上接到的字节依次保存在接收缓冲区中也是按内存地址从低到高的顺序保存。因此网络数据流的地址应这样规定先发出的数据是低地址后发出的数据是高地址。TCP/IP协议规定网络数据流应采用大端字节序,即低地址高字节。不管这台主机是大端机还是小端机都会按照这个TCP/IP规定的网络字节序来发送/接收数据。如果当前发送主机是小端就需要先将数据转成大端否则就忽略直接发送即可。 注意所有的大小端的转化工作由操作系统来完成因为该操作属于通信细节不过也有部分的数据需要我们自行进行处理比如IP的端口号 同时为使网络程序具有可移植性使同样的C代码在大端和小端计算机上编译后都能正常运行可以调用以下库函数做网络字节序和主机字节序的转换 #includearpa/inet.huint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntonl(uint32_t netlong); uint16_t ntons(uint16_t netshort); h表示host,n表示network,l表示32位长整数,s表示16位短整数。例如htonl表示将32位的长整数从主机字节序转换为网络字节序例如将IP地址转换后准备发送。如果主机是小端字节序这些函数将参数做相应的大小端转换然后返回。如果主机是大端字节序这些函数不做转换,将参数原封不动地返回。 四socket编程接口 4.1 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); 4.2 sockaddr结构 可以发现上面的每个接口的参数都有一个结构体指针 struct sockaddr* addr下面详细介绍一下 套接字有三种 1域间套接字编程套接字不仅支持跨网络的进程间通信也支持本地的进程间通信用的就是这个2原始套接字编程通常用来编写一些网络工具比如监测抓包等3网络套接字编程重点使用传输层通过TCP和UDP实现用户间的网络通信 所以最开始的套接字结构体提供了两种 sockaddr_un用于本地sockaddr_in用于跨网络 套接字种类不同就有不同的应用场景但是网络接口的设计者不想搞三套计划将网络接口统一抽象化而网络接口要想统一那么接口的参数类型必须一致所以就设计了sockaddr这个结构体 之后在传参数的时候只要传sockaddr这一个就可以了在设置参数之前就可以往这个结构体添加字段这点下一篇简单Udp和程序的代码中会具体表现如上图在调用socket API 的那些接口时这些API就可以提取 sockaddr 内部的头16字节进行识别进而得出我们是要进行网络通信还是本地通信执行对应的操作完成接口的统一注意实际在进行网络通信时定义的还是 sockaddr_in 这样的结构体只是在传参的时候将该结构体的地址类型强制转换位 sockaddr* 罢了  问题为啥不用C语言的万能参数 void* 来代替struct sockaddr* 类型呢  解答最简单的原因就是设计网络接口时C语言还不支持void*传参而在后面C语言支持void*之后也很难改回来了因为这些接口都是系统接口而系统接口是上层软件接口的基石所以系统接口不是想改就改的所以现在的网络接口依旧保留了sockaddr
http://www.dnsts.com.cn/news/34159.html

相关文章:

  • 建站快车怎么样集团做网站
  • 行业用品网站怎么建设外链专做彩票的网站
  • 做代练去什么网站安全贺州市住房和城乡建设局网站
  • 唐山网站排名提升唐山免费网站制作
  • 建设银行网站首页广东建设厅官网证件查询
  • 怎么做网站内容百度快照优化网站
  • html5 手机网站导航条安丘网站建设
  • 泰安整站优化2023能用的磁力搜索引擎
  • 多用户网站福田欧曼服务站电话
  • 东营建设网站公司电话号码江西南昌建设厅网站
  • 中山专业做网站公司重庆模板网站建设
  • 做网站如何收集资料网站版块策划
  • 农村做网站开发网络营销的概念与含义谷歌
  • 深圳网站建设服务哪个便宜啊东莞建筑设计公司排名
  • 深圳网站建设流程图网站开发实用技术第二版答案
  • 英国男女做那个视频网站学校如何建网站
  • 中山百度网站排名微网站建设公司首选
  • 襄阳网站推广优化技巧怎样做一个公众号
  • 湘潭做网站 磐石网络网店的网站设计方案
  • 建设银行企业网站银行新开三端互通传奇网站
  • 深圳微商城网站设计价格网站没有备案会怎么样
  • 山东城市建设职业学院官方网站软件开发需求发布平台
  • 在线视频网站a一级爰a做免费网站开发一级分销
  • 免费网站大全黄页动漫网站关键词排名分析
  • 无锡网站制作选哪家做网站要学哪些代码
  • 网站检测wordpress 不显示ip
  • 个人注册网站手机在线制作照片p图
  • 如何在建设银行网站预约纪念币asp如何做网站
  • 网站建设 aderwordpress如何优化页面
  • 一个主机可以做几个网站域名网络推广搜索引擎