首页 > 其他分享 >20201306吴龙灿第十三章学习笔记

20201306吴龙灿第十三章学习笔记

时间:2022-11-11 11:13:52浏览次数:73  
标签:协议 UDP int IP TCP 吴龙灿 第十三章 include 20201306

知识点归纳

第十三章 TCP/IP和网络编程

学习目标

通过本章的学习,了解TCP/IP协议及其应用,包括TCP/IP协议栈,ip地址,主机名,DNS,IP数据包和路由器;理解TCP/IP协议簇中的UDP和TCP协议、端口号和数据流;理解套接字,并通过简单编程来加深理解。第二部分介绍web和CGI编程,解释HTTPD服务器,及HTTP编程模型,理解web服务器的配置和运行。

网络编程

1.什么是网络、计算机网络的构成是什么?

在计算领域中,网络是传输信息、接受、共享的虚拟的平台。
通过它可以把各个点、面、体的信息联系到一起,从而实现这些资源的共享。
网络是人类发展史上最重要的发明,提高了人类和科技的一个发展。

2.什么是网络编程?

网络编程从大的方面就是说对信息的发送接收。
通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程。
更为具体的涉及:网络模型、套接字、数据包。

3.7层网络模型--OSI

基础层:物理层(physical)、数据链路层(Datalink)、网络层(network).。
传输层(Transport):TCP-UDP协议层、Socket。
高级层::会话层(Session)、表示层(Presentation)、应用层(Application)

4.网络模型---对应关系

5.Socket与TCP、UDP

Socket:

简单来说是ip地址与端口的结合协议(RFC 793).
一种地址与端口的结合描述协议。
TCP/IP协议的相关API的总称;是网络API的集合实现.
涵盖了Stream socket /Datagram Socket

socket 的组成与作用:

在网络传输中用于唯一标识两个端点的链接。
端点:包括(ip+port)
4个要素:客户端的地址、客户端的端口、服务器的地址、服务器端口。

TCP/IP协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/IP(Comer 1988,2001;RFC1180 1991)是互联网的基础。TCP代表传输控制协议。IP 代表互联网协议。目前有两个版本的IP,即IPv4和IPv6。IPv4使用32位地址,IPv6则使用128位地址。

如图所示为 TCP/IP 的各个层级以及每一层级的代表性组件及其功能。


翻译过来就是

TCP/IP 网络中的数据流路径。

IP主机和IP地址

每个主机都有一个本地主机名localhost,默认 IP地址为 127.0.0.1。
本地主机的链路层是一个回送虚拟设备,它将每个数据包路由回同一个localhost。这个特性可以让我们在同一台计算机上运行TCP/IP 应用程序,而不需要实际连接到互联网。
IP地址分为两部分,即 NetworkID 字段和HostID字段。根据划分,IP 地址分为A~E类。

类别 最大网络数 IP地址范围 单个网段最大主机数 私有IP地址范围
A 126(2^7-2) 1.0.0.1-127.255.255.254 16777214 10.0.0.0-10.255.255.255
B 16384(2^14) 128.0.0.1-191.255.255.254 65534 172.16.0.0-172.31.255.255
C 2097152(2^21) 192.0.0.1-223.255.255.254 254 192.168.0.0-192.168.255.255

IP协议

IP协议用于在 IP主机之间发送/接收数据包。IP尽最大努力运行。IP 主机只向接收主机发送数据包,但它不能保证数据包会被发送到它们的目的地,也不能保证按顺序发送。这意味着IP 并非可靠的协议。

IP报头格式

路由器

是接收和转发数据包的特殊IP主机。一个IP数据包可能会经过许多路由器,或者跳跃到达某个目的地。每个IP包在IP报头中都有一个8位生存时间(TTL)计数,其最大值为255。

UDP

UDP(用户数据报协议)(RFC768 1980;Comer 1988)在IP上运行,用于发送/接收数据报。与IP类似,UDP不能保证可靠性,但是快速高效。

TCP

TCP(传输控制协议)是一种面向连接的协议,用于发送/接收数据流。TCP也可在IP 上运行,但它保证了可靠的数据传输。

端口编号

端口号是分配给应用程序的唯一无符号短整数。要想使用UDP或TCP,应用程序(进程)必须先选择或获取一个端口号。前1024个端口号已被预留。其他端口号可供一般使用。应用程序可以选择一个可用端口号,也可以让操作系统内核分配端口号。
端口号的范围从0到65535。

TCP/IP中的数据流

应用程序层的数据被传递到传输层,传输层给数据添加一个TCP或UDP 报头来标识使用的传输协议。合并后的数据被传递到IP 网络层,添加一个包含 IP地址的IP 报头来标识发送和接收主机。然后,合并后的数据再被传递到网络链路层,网络链路层将数据分成多个帧,并添加发送和接收网络的地址,用于在物理网络之间传输。IP地址到网络地址的映射由地址解析协议(ARP)执行(ARP1982)。在接收端,数据编码过程是相反的。每一层通过剥离数据头来解包接收到的数据、重新组装数据并将数据传递到上一层。发送主机上的应用程序原始数据最终会被传递到接收主机上的相应应用程序。

实践代码、截图

使用C语言实现简单UDP传输

客户端:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#define MAXBUF 256
int main(int argc, char const *argv[])
{
	int s = 0;
	int n = 0;
	int reuse = 1;
	int port = 1987;
	struct sockaddr_in srv;
	char buf[MAXBUF] = {0};
	/*解析参数*/
	if (argc != 2)
	{
		printf("Usage:%s ServerIP\n", argv[0]);
		return -1;
	}
 
	bzero(&srv, sizeof(srv));
	srv.sin_family = PF_INET;
	srv.sin_addr.s_addr = inet_addr(argv[1]);
	srv.sin_port = htons(port);
	/*创建 UDP 套节字*/
	s = socket(AF_INET, SOCK_DGRAM, 0);
	if(s<0){
		perror("socket");
		return -1;
	}
 
	while(1){
		memset(buf, 0, MAXBUF);
		/*读取用户输入到buf中*/
		fgets(buf, MAXBUF, stdin);
 
		/*通过套节字 s 向服务器发送数据*/
		if ((n = sendto(s, buf, strlen(buf), 0, (struct sockaddr *) &srv, sizeof(struct sockaddr))) < 0)
		{
			perror("sendto");
			return -1;
		}else{
			printf("send to %s(port=%d) len %d:%s\n", argv[1], port, n, buf);
		}
	}
}

服务端:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
 
#define MAXBUF 256
int main(int argc, char const *argv[])
{
	int s = 0;
	int n = 0;
	int reuse = 1;
	int cli_len = sizeof(struct sockaddr);
	int port = 1987;
	char buf[MAXBUF] = {0};
	struct sockaddr_in addr, cli;
 
	/*初始化本地监听端口信息*/
	bzero(&addr, sizeof(addr));
	addr.sin_family = PF_INET;
	addr.sin_addr.s_addr = INADDR_ANY;
	addr.sin_port = htons(port);
 
	/*创建UDP套节字*/
	s = socket(AF_INET, SOCK_DGRAM, 0);
	if (s<0)
	{
		perror("socket");
		return -1;
	}
 
	/*允许端口复用*/
	setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
 
	/*绑定指定端口*/
	if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0)
	{
		perror("bind");
		return -1;
	}
 
	while(1){
		memset(buf, 0, MAXBUF);
		/*从套节字s中读取数据*/
		n = recvfrom(s, buf, MAXBUF, 0, (struct sockaddr *)&cli, &cli_len);
		if(n<0){
			perror("recvfrom");
			return -1;
		}else{
			printf("receive msg from %s(port=%d) len %d: %s\n",inet_ntoa(cli.sin_addr), port, n, buf);
		}
	}
	
	return 0;
}

运行截图

编译

运行

参考,特别感谢

https://www.cnblogs.com/DKYcaiji/p/15600552.html
https://blog.csdn.net/qq_38616723/article/details/85345567

标签:协议,UDP,int,IP,TCP,吴龙灿,第十三章,include,20201306
From: https://www.cnblogs.com/wulongcan20201306/p/16879919.html

相关文章

  • 20201208史逸霏第十三章学习笔记
    第十三章读书笔记13.1TCP/IP协议IPv432位地址IPv6128位地址TCP/IP的哥哥层级以及每一层及的代表性组件及其功能顶层是使用TCP/IP的应用程序,用于登录到远程主机......
  • 20201306吴龙灿第十二章学习笔记
    知识点归纳1.块设备I/O缓冲区什么是块设备:块设备是i/o设备中的一类,是将信息存储在固定大小的块中,每个块都有自己的地址,还可以在设备的任意位置读取一定长度的数据,例如硬......
  • 20201306吴龙灿第五章学习笔记
    Ⅰ知识点归纳一、硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。硬件定时器能够按......
  • 《Apache MINA 2.0 用户指南》第十三章:调试
        第十三章起是MINA的高级主题部分,一直到最后一章(第十七章),将对调试、状态机、代理、JMX集成、Spring集成等主题进行详细讨论。 ......
  • 20201306吴龙灿第四章学习笔记
    知识点归纳前言学习了解并发编程的概念,理解并行计算的概念和重要性;掌握线程的原理和其对于进程的优势。通过学习Pthread线程操作,了解如何使用线程进行并发编程;理解死锁问......
  • 20201306吴龙灿第三章学习笔记
    目录Ⅰ知识点归纳1.进程的概念·什么是进程?·进程的特征动态性并发性独立性异步性结构性·程序和进程主要区别2.多任务处理系统(1)背景(2)多任务处理系统代码介绍3.进程同步(1)同......
  • 20201306吴龙灿第十一章学习笔记
    目录Ⅰ知识点归纳前言一、EXT2文件系统二、EXT2文件系统数据结构(一)通过mkfs创建虚拟硬盘(二)虚拟硬盘布局(三)超级块(四)EXT2的索引节点三、mkdir命令1.语法:2.功能:3.参数:Ⅱ最有收......
  • 20201306吴龙灿第七、八章学习笔记
    知识点归纳一、文件操作1.文件操作级别​文件操作分为五个级别,按照从低到高的顺序可以如下表示:硬盘级别​这些操作多是针对系统的实用程序,一般用户不会涉及到它......
  • Spring MVC框架:第十三章:类型转换
    SpringMVC将“把请求参数注入到POJO对象”这个操作称为“数据绑定”。数据类型的转换和格式化就发生在数据绑定的过程中。类型转换和格式化是密不可分的两个过程,很多带格......
  • 20201306吴龙灿第十章学习笔记
    知识点归纳这一章的主要内容包含了sh编程的绝大部分内容。但是在此之前,还是要强调一下诸如Python、C、Java这些程序语言的特点。1.Python(一)Python是什么?Python是一......