网络编程实战(

学好网络编程,需要达到以下三个层次:

第一个层次,充分理解 TCP/IP 网络模型和协议。
在这方面,仅仅做到理论上的理解是远远不够的。在基础篇中我们会梳理 TCP/IP 模型和网络函数接口之间的联系,并通过实例展开对套接字,套接字缓冲区,拥塞控制,数据包和数据流,本地套接字(UNIX 域套接字)等的讨论,给你一个全面而具体的知识体系。

第二个层次,结合对协议的理解,增强对各种异常情况的优雅处理能力。
比如对 TCP 数据流的处理,半关闭的连接,TCP 连接有效性的侦测,处理各种异常情况等,这些问题决定了程序的健壮性。有关这一部分的内容,我们将在提升篇详细展开。

第三个层次,写出可以支持大规模高并发的网络处理程序。
在这个阶段,我将带你一起深入研究 C10K 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术。我们将在性能篇深入讨论这些技术,并在实战篇结合实例,一步步教你写出高性能的网络程序

OSI & TCP/IP

 客户端 - 服务器网络编程模型

 拿我们常用的网络购物来说,我们在手机上的每次操作,都是作为客户端向服务器发送请
求,并收到响应的例子。

 1. 当一个客户端需要服务时,比如网络购物下单,它会向服务器端发送一个请求。注意,
这个请求是按照双方约定的格式来发送的,以便保证服务器端是可以理解的;
2. 服务器端收到这个请求后,会根据双方约定的格式解释它,并且以合适的方式进行操
作,比如调用数据库操作来创建一个购物单;
3. 服务器端完成处理请求之后,会给客户端发送一个响应,比如向客户端发送购物单的实
际付款额,然后等待客户端的下一步操作;
4. 客户端收到响应并进行处理,比如在手机终端上显示该购物单的实际付款额,并且让用
户选择付款方式。

IP 和端口 

  1. IP地址就好比所在一个酒店
  2. 端口号就好比所在酒店的具体房间号
  • 当一个客户端发起连接请求时,客户端的端口是由操作系统内核临时分配的,称为临时端口;

计算机的 IP 地址是唯一的,每个连接的端口号是不同的 。                                                            套接字对:(客户端IP地址:客户端口号,服务器端IP地址:服务器端口号),每一个连接都由这样的一个套接字唯一确定。按照下面的四元组表示:

(clientaddr:clientport, serveraddr: serverport)

子网掩码 

ip=网络+主机 

在网络 IP 划分的时候,我们需要区分两个概念。
第一是网络(network)的概念,直观点说,它表示的是这组 IP 共同的部分,比如在
192.168.1.1~192.168.1.255 这个区间里,它们共同的部分是 192.168.1.0。
第二是主机(host)的概念,它表示的是这组 IP 不同的部分,上面的例子中 1~255 就是
不同的那些部分,表示有 255 个可用的不同 IP。

ip地址

ip地址格式x.x.x.x,每个x范围0到255 理论上0.0.0.0到255.255.255.255这就是IPv4地址范围

 

 子网掩码:

子网掩码作用是划分网段的 例如学校里分班,分了班上课效率之类才会提高,分班大家都有学号,根据学号前边数字代表班级后边代表个人。只要通过学号就能看俩个同学是否一个班级。

ip地址和学号类似,也分网段,如何知道访问目标ip是否和我同网段。ip地址看网络位,ip地址的前多少位,代表ip属于哪个网段

子网划分:

假设对 C 类地址进⾏⼦⽹划分,⽹络地址 192.168.1.0,使⽤⼦⽹掩码 255.255.255.192 对 其进⾏⼦⽹划分。

C 类地址中前 24 位是⽹络号,最后 8 位是主机号,根据⼦⽹掩码可知从 8 位主机号中借⽤ 2 位作为⼦⽹号(对应4个⼦⽹)。 划分后的4个⼦⽹如下:

 

ip:192.168.1.1  掩码:255.255.255.0 通过这个就可以看出ip的前三段 ,红色代表网络位,前三段一样就是同网段。至于为什么是比较三段还是俩段,是通过掩码决定的,掩码是三段255。如果掩码是两段255,网络位就是前俩段。掩码作用确定ip所在的网段,有了掩码就知道网络位进而就知道另一个ip是否和自己同网段。

访问同网段目标时,会用一种通信方式,直接发数据包 直接通信

访问不同网段目标时,用另一种通信方式,必须找中间人,有中间人做数据转发,中间人--网关

总结:IP地址就是,设备的地址,发数据包,填地址

           掩码,确定网段  

          网关,访问不同网段,需要一个中间人

 DNS

我们在上⽹的时候,通常使⽤的⽅式是域名,⽽不是 IP 地址,因为域名⽅便⼈类记忆。那 么实现这⼀技术的就是 DNS 域名解析,DNS 可以将域名⽹址⾃动转换为具体的 IP 地址

数据报和字节流

传输层其实是有两种协议的,一种是大家广为熟悉的 TCP, 而另一种就是 UDP

TCP(字节流套接字,Stream Socket);UDP(数据包套接字,Datagram Socket)。

TCP是可靠的、双向连接的通讯流。当将“A-B-C” 顺序的字节流输出到套接字上时,发送的字节流顺序与接收的字节流顺序是一致且不会出错的

UDP是无连接的Socket,目的是以最小的开销来达到网络环境中的进程通信目的,是一种不可靠的连接,但具有简单、传输速度快的优点

UDP提升可靠性的方法:                                                                                                                        1.对报文进行标号        2.设计 Request-Ack 机制        3.重传                                      在一定程度上可以达到更为高可靠的 UDP 程序。当然,这种可靠性和 TCP 相比还是有一定的距离,不过也可以弥补实战中 UDP 的一些不足。

UDP应用:如多人联网游戏、视频会议,甚至聊天室。(速度快)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值