完成第三章 网络地址的初始化与分配

This commit is contained in:
riba2534
2019-01-14 13:11:06 +08:00
parent c61068f4fc
commit 6679c264ca
4 changed files with 1006 additions and 3 deletions

View File

@@ -8,7 +8,7 @@
所以本笔记中只学习有关于 Linux 的部分。
## 第章:理解网络编程和套接字
## 第 1 章:理解网络编程和套接字
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点连接可能进不去。
@@ -298,7 +298,7 @@ file descriptor 3: 16
> 答:暂略。
## 第章 套接字类型与协议设置
## 第 2 章 套接字类型与协议设置
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点连接可能进不去。
@@ -457,7 +457,7 @@ Function read call count: 13
> TCP 不存在数据边界。在接收数据时需要保证在接收套接字的缓冲区填充满之时就从buffer里读取数据。也就是在接收套接字内部写入buffer的速度要小于读出buffer的速度。
## 第章 地址族与数据序列
## 第 3 章 地址族与数据序列
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
@@ -879,6 +879,76 @@ addr.sin_addr.s_addr = inet_addr(serv_ip); //基于字符串的IP地址初始化
addr.sin_port = htons(atoi(serv_port)); //基于字符串的IP地址端口号初始化
```
### 3.5 基于 Windows 的实现
### 3.6 习题
> 答案仅代表本人个人观点,不一定正确
1. **IP地址族 IPV4 与 IPV6 有什么区别?在何种背景下诞生了 IPV6?**
主要差别是IP地址所用的字节数目前通用的是IPV4目前IPV4的资源已耗尽所以诞生了IPV6它具有更大的地址空间。
2. **通过 IPV4 网络 ID 、主机 ID 及路由器的关系说明公司局域网的计算机传输数据的过程**
网络ID是为了区分网络而设置的一部分IP地址假设向`www.baidu.com`公司传输数据,该公司内部构建了局域网。因为首先要向`baidu.com`传输数据也就是说并非一开始就浏览所有四字节IP地址首先找到网络地址进而由`baidu.com`(构成网络的路由器)接收到数据后,传输到主机地址。比如向 203.211.712.103 传输数据,那就先找到 203.211.172 然后由这个网络的网关找主机号为 172 的机器传输数据。
3. **套接字地址分为IP地址和端口号为什么需要IP地址和端口号或者说通过IP地址可以区分哪些对象通过端口号可以区分哪些对象**
有了IP地址和端口号才能把数据准确的传送到某个应用程序中。通过IP地址可以区分具体的主机通过端口号可以区分主机上的应用程序。
4. **请说明IP地址的分类方法并据此说出下面这些IP的分类。**
- 214.121.212.102C类
- 120.101.122.89A类
- 129.78.102.211B类
分类方法A 类地址的首字节范围为0~127、B 类地址的首字节范围为128~191、C 类地址的首字节范围为192~223
5. **计算机通过路由器和交换机连接到互联网,请说出路由器和交换机的作用。**
答:路由器和交换机完成外网和本网主机之间的数据交换。
6. **什么是知名端口?其范围是多少?知名端口中具有代表性的 HTTP 和 FTP 的端口号各是多少?**
答:知名端口是要把该端口分配给特定的应用程序,范围是 0~1023 HTTP 的端口号是 80 FTP 的端口号是20和21
7. **向套接字分配地址的 bind 函数原型如下:**
```c
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
```
**而调用时则用:**
```c
bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)
```
**此处 serv_addr 为 sockaddr_in 结构体变量。与函数原型不同,传入的是 sockaddr_in 结构体变量,请说明原因。**
答:因为对于详细的地址信息使用 sockaddr 类型传递特别麻烦,进而有了 sockaddr_in 类型,其中基本与前面的类型保持一致,还有 sa_sata[4] 来保存地址信息,剩余全部填 0所以强制转换后不影响程序运行。
8. **请解释大端序,小端序、网络字节序,并说明为何需要网络字节序。**
CPU 向内存保存数据有两种方式,大端序是高位字节存放低位地址,小端序是高位字节存放高位地址,网络字节序是为了方便传输的信息统一性,统一成了大端序。
9. **大端序计算机希望把 4 字节整数型 12 传递到小端序计算机。请说出数据传输过程中发生的字节序变换过程。**
0x12->0x21
10. **怎样表示回送地址?其含义是什么?如果向会送地址处传输数据将会发生什么情况?**
127.0.0.1 表示回送地址指的是计算机自身的IP地址无论什么程序一旦使用回送地址发送数据协议软件立即返回不进行任何网络传输。
## 第 4 章 基于 TCP 的服务端、客户端1
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
### 4.1 理解 TCP 和 UDP
## License