socket编程的概念

socket就是插座(中文翻译成套接字),运行在计算机中的两个程序通过socket建立起一个通道,数据在通道中传输。
socket把复杂的TCP/IP协议族隐藏了起来,对程序员来说,只要用好socktet相关的函数,就可以完成网络编程。

socket的分类

socket提供了流(stream)和数据报(datagram)两种通信机制,即流socket和数据报socket
流socket基于TCP协议,是一个有序、可靠、双向字节流的通道,传输数据不会丢失或错乱。UDP不是一个可靠的协议,对数据的长度有限制,但是它的效率比较高。
某些应用层协议,出于历史原因,受当时技术和网络条件限制,选择了基于UDP实现,其选择的理由现在很可能已经不再成立了。
实时的音视频聊天可能采用的是UDP,这种业务可以接受数据的丢失且不必重传。
本专题视频只介绍流socket,数据报socket的应用场景实在太少,以后可能更少。

网络大体模块

1.计算机网络概念 七层模型和四层模型 协议(tcp/ip) mac地址 ip地址 port子网掩码
2.数据包的一个组包和拆包流程 tcp/udp特点
3.udp编程 编程准备(字节序 端口 ip大小端转化的函数) udpAPI 发送接受数据
4.udp-tftp编程 udp广播
5. tcp编程 客户端和服务器编写流程 三次握手和四次挥手
6. tcp高并发服务器 多进程多线程服务器 select poll epoll实现的tcp服务器 epoll+线程池
7. 网络通信过程(了解)
8.原始套接字 自己组底层的数据包 收一帧完整的数据包
9.http协议 web-html 编写web服务器

计算机网络发展简史

最早的广域网

在通信双方或多方之间,通过电路交换建立电路连接的网络

电路交换网特点

1.建立链接->使用链接->释放链接
2.物理通路被通信双方独占
计算机数据是突发式出现在数据链路上的,而电路交换网的建立链接、使用链接、释放链接的三个过程使得传输效率太低,故电路交换不适合传输计算机数据。

计算机网络的要求

美国1958年1月7日成立ARPA(美国高级研究计划署)
1.不是为了打电话
2.结构简单,可靠的传输数据
3.能够连接不同种类的计算机
4.所有网络节点同等重要
5.必须有冗余的路由

分组交换

通过标有地址的分组进行路由选择传输数据,使通信通道仅在传送期间被占有的一种交换方式分组的组成:
报文切分成组,每个分组都由首部和数据报组成。

交换方式

存储转发
节点收到分组,先暂时存储下来,再检查其首部,按照首部种的目的地址,找到合适的节点转发出去
特点:
1.以分组为传输单位
2.独立的选择转发路由
3.逐段占用,动态分配传输带宽

因特网发展史

从单个ARPANET向因特网发展的过程
1983年TCP/IP协议成为ARPANET的标准协议

三级结构的因特网

(NSFNET 国家科学基金网)
围绕六台大型计算机中心建设起来的计算机网络
主干网、地区网、校园网

多级结构的因特网

NSFNET逐步被商用因特网主干网替代

TCP/IP协议简介(簇)

为了使各种不同的计算机之间可以互联,ARPANET制定了一套计算机通信协议,即TCP/IP协议(簇)

分层结构


OSI的七层模型
物理层:各种网络接口(双绞线)的类型,传输速率 等等的一些物理特性
数据链路层:负责对数据帧的收发
网络层:使数据包能够最大可能的到达目的主机
传输层:数据包和程序通信的桥梁
会话层:保持连接的
表示层:数据解压缩解码等等
应用层:应用程序
TCP/IP的4层模型
链路层:设备对设备的收发
网络层:主机到主机的数据收发
传输层:进程到进程的数据收发
应用层:应用程序

应用层协议:
FTP:文件传输协议
TFTP:简单文件传输协议
HTTP:超文本传输协议
SSH:
TELNET:

传输层协议:
TCP:传输控制协议
UDP:用户数据报协议

网络层协议:
IP:因特网互联协议
ICMP:因特网控制报文协议
IGMP:因特网组管理协议

链路层协议:
ARP:地址解析协议 作用:通过IP找mac地址
RARP:反向地址解析协议 作用:通过mac地址找IP

MAC地址、IP地址、Netmask、端口

网卡、MAC地址

网络适配器,用来发送接受数据的,将模拟信号转成数据信号
每块网卡都有一个全球唯一的标识id
这个全球唯一的标识id号就是我们所说的MAC地址
MAC地址是 48b 6字节
MAC地址是用来标识网卡的物理地址不能改变

IP地址

用来标识主机或网卡的一个虚拟ip
ip地址 ipv4 32b ipv6 128b
ip地址分为2部分:主机id,子网id
子网掩码:连续1或连续0组成 ,结合ip一起使用,单独存在无意义
主机id全为0的是网段地址
主机id全为1的是广播地址
网关:也是一块网卡,也占有一个该网段的ip地址,一般网关负责将数据转发到外网

IP地址分类

公有IP:可直接连接Internet,经由InterNIC所统一规划的IP
私有IP:不可直接连接Internet,主要用于局域网络内的主机联机规划

回环IP地址

通常127.0.0.1 称为回环地址
功能:
主要是测试本机的网络配置,能ping通127.0.0.1说明本机的网卡和IP协议安装都没有问题
注意:
127.0.0.1-127.255.255.254中的任何地址都将回环到本地主机中
不属于任何一个有类别地质类,它代表设备的本地虚拟接口

端口

port 2字节 (0 - 65535)
端口在整个系统中是唯一的,可以重用
port 每一个网络应用程序必须有一个端口用来标识这个应用程序
知名端口:0-1023
动态端口:1024-65535

学习来源:bilibili的C语言技术网、千峰物联网学科linux网络编程

(C++后台面经)网络编程1相关推荐

  1. 网络编程释疑之:TCP连接拔掉网线后会发生什么

    背景:前些天团队在进行终端设备和服务器端长连接业务的测试时,发现了这么一个情况:在拔掉设备端的网线后,再插上网线,有时可以继续正常的进行长接连请求,而且用的还是拔掉网线之前的那个长连接.但是有时却不能 ...

  2. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 1 //获取sock ...

  3. 【网络编程开发系列】好端端的MQTT-broker重新部署后居然出现TLS握手失败了

    摘要:本文通过一次真实的现网案例复盘,深度还原TLS握手问题的排查思路和方法,希望对广大读者有所启发和帮助. 文章目录 1 写在前面 2 问题描述 2.1 项目背景 2.2 现场问题 3 场景复现 3 ...

  4. c++网络编程连接成功后回调onconnected_谈谈网络编程(基于C++)

    这里讲了一点网络编程的一些新路,一点体悟.学习就是这种不断总结提高的过程. 设计到进程,线程,线程池,reactior和proactor并发编程模式,IOCP,linux下的epoll..... 讲到 ...

  5. 【Linux网络编程】域名转IP后的一些深层(计算机底层)的思考

    文章目录 以下代码运行于64位Linux系统中 先看一下代码样本 思考 说这些是为了证明什么呢? 结语 以下代码运行于64位Linux系统中 先看一下代码样本 HOSTENT *H = gethost ...

  6. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口. 最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件 抖动窗口功能 ...

  7. java基于http协议编程_Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API. U ...

  8. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  9. Linux网络编程实例分析

    最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入 ...

  10. C语言网络编程:close或者shutdown断开通信连接

    文章目录 前言 close函数介绍 shutdown函数介绍 前言 这里在主要通过实例进行描述close函数在网络编程中的使用 TCP编程模型中客户端或者服务器只要主动通过close发起断开连接的请求 ...

最新文章

  1. 开发日记-20190815 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 23
  2. python lambda函数详细解析(据说面试90%的人经常遇到)
  3. 如何优化MySQL千万级大表
  4. tomcat启动后命令行日志中文乱码
  5. 华为鸿蒙系统学习笔记8-开发者生态建设
  6. oracle within的用法,Oracle的 listagg() WITHIN GROUP ()函数使用
  7. 因2800万美元太贵 演员汤姆·汉克斯拒绝贝佐斯上太空邀请
  8. ionic4 双向绑定
  9. 算法导论 思考题6-2
  10. paip.提升用户体验---c++ 悬浮窗体以及右键菜单以及socket接口
  11. 软件工程毕业设计选题java_软件工程毕业设计选题
  12. 蓝桥杯真题:杨辉三角形
  13. cr全称是什么意思_魔兽世界CR是团灭的意思 他的全称是什么呢?
  14. java kindeditor 上传图片_使用Kindeditor上传图片
  15. 谷歌怎么保存网页为图片?
  16. 怎么调节台式计算机字体大小,电脑上怎么调整字体大小
  17. 基于TextRank的抽取式文本摘要(英文)
  18. HBase进化之从NoSQL到NewSQL,凤凰涅槃成就Phoenix
  19. 错误代码 missing-signature 错误原因: 缺少签名参数-自查方案
  20. web开发---为什么要安装web服务器

热门文章

  1. keras-迁移学习-resnet101-踩过的坑
  2. Python语言程序设计 嵩天
  3. dvwa通关教程超详细
  4. 虚拟机 VMware 16安装教程
  5. fanuc换刀宏程序详解_FANUC宏程序入门到精通,新手必看
  6. lavaral中文手册_Laravel5.3手册下载
  7. wps 云服务器登录_WPS云服务使用协议
  8. proteus仿真电路连线
  9. Eclipse安装php插件phpeclipse(转)
  10. 计算机使用交接记录表,交接文档_计算机软件及应用_IT计算机_专业资料