
💡 소켓라이브러리란 ?
- 데이터를 받기위한 실제적인 창구역할을 한다.
- 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야한다.
- 소켓은 프로토콜, IP주소, 포트넘버로 정의된다.
💡 프로토콜이란? "약속"
- 서로 다른 기종의 컴퓨터끼리 통신하기 위해서 미리 정해놓은 규칙을 의미한다.
- 웹은 HTTP라는 약속을 사용한 통신으로 이루어져있다.
- 현재 가장 널리 사용되는 프로토콜은 TCP/IP로 인터넷 서비스에 사용된다. => 즉 서로 다른 기종의 컴퓨터라도 TCP/IP가 설치되어 있으면 인터넷에 연결하여 데이터 송수신이 가능하다
- 프로토콜의 예) 케이블 규격, IP주소 지정 방법 등
- 인터넷과 관련된 프로토콜을 모은 것을 TCP/IP라고 한다.
📘 인터넷 통신
- 인터넷에서 컴퓨터 둘은 어떻게 통신할까? 클라이언트 - 인터넷 - 서버
- 클라이언트(client) : 서버에 의뢰를 하는 웹 브라우저 등
- 클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것을 웹에서는 HTTP라는 불리는 프로토콜이다.
- 웹은 HTTP라는 약속을 사용한 통신으로 이루어진다.
📘 TCP/IP 4 Layer
- TCP/IP는 현재 수많은 프로그램들이 인터넷으로 통신하는데 가장 기반이 있는 프로토콜로 인터넷과 관련된 프로토콜을 모은 것이다
- 애플리케이션 계층, 트랜스포트 계층, 네트워크 계층, 링크계층으로 구분한다.

💡 왜 TCP/IP는 계층화되어있을까?
- 계층화되어 있으면 사양이 변경된 경우 해당 계층만 바꾸면 된다.
- 계층화하면 각 층에 자신이 담당하는 부분만 고려하면된다.
- ex) 전송 계층에서 TCP -> UDP로 변경된다고 해서 웹브라우저를 설치할 필요가 없다.
🎈 애플리케이션 계층(ex : FTP, DNS, HTTP)
웹 서비스, 메일 등 서비스들을 실질적으로 사람들에게 제공한다.
🏸 DNS(Domain Name System)
- DNS는 도메인명에서 IP주소를 조사하거나 반대로 IP주소로부터 도메인명을 조사하는 서비스를 제공하고 있다.
<IP의 단점>
- IP는 기억하기 어렵다.
- IP는 변경될 수 있다.
=> 도메인 명을 IP주소로 변환
[DNS 서버]
도메인명 | IP
google.com | 200.200.200.2
aaa.com | 210.210.210.3
- 클라이언트가 google.com 도메인명 요청
- DNS서버가 응답 : 200.200.200.2
- 클라이언트가 서버로 접속
🎈 트랜스포트 계층(ex : TCP, UDP)
애플리케이션과 인터넷 계층 사이의 데이터가 전달 될 때 중계역할을 한다.
🏸 TCP, UDP

🔍 TCP 패킷 정보
- 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 추가
🔍 TCP특징(전송제어 프로토콜)
- 연결지향 -TCP3 3way handshake(가상연결)
- SYN(클라이언트 -> 서버)
- SYN+ACK(서버 -> 클라이언트)
- ACK(클라이언트 -> 서버)
- 데이터 전송
- 데이터 전달 보증
- 나 데이터 잘 받았어라고 보내줌(?어떻게 보내는지 궁금하다!)
- 순서 보장
- 패킷1, 패킷2, 패킷3 순서로 전송
- 패킷1, 패킷3, 패킷2 순서로 도착
- 패킷 2부터 다시 보내
💡 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 추가되었기 떄문에 가능함
- 신뢰할 수 있는 프로토콜
- 현재 대부분 TCP 사용
- 신뢰성 있는 바이트 스트림 서비스를 제공
💡 신뢰성있는 바이트 스트림 서비스란?
신뢰성 있는 서비스 : 상대방에게 보내는 서비스
바이트 스트림 서비스 : 용량이 큰 데이터를 보내기 쉽게 TCP세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리 하는 것
🏸 UDP 특징 : 사용자 데이터그램 프로토콜(User Datagram Protocol)
- IP와 기능은 같다 + PORT + 체크섬 정도만 추가
- 애플리케이션에서 추가 작업이 필요함
- 장점 : 웹브라우저에서 HTTP통신할때 TCP 3way handshake할때 시간이 너무 오래걸리는 문제를 해결해줌
💡 PORT : 하나의 IP로 음악 듣고, 영화 볼때 이를 구분할 때 쓰는것이다.
🏸 PORT
- 한번에 둘 이상 연결해야하면?
- TCP/IP 패킷정보에 출발지 PORT, 목적지 PORT가 있음
- 같은 IP내에서 프로세스 구분
- ex) 포트번호 : 게임 8090, 화상통화 21000, 웹브라우저 10010
- 0~65535 할당 가능
- 0~1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20,21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
🎈 네트워크 계층
네트워크 상에서 패킷의 이동을 다룬다.
장치로부터 받은 네트워크 패킷을 IP주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다.
- IP는 상대방이 제대로 받았는지 보장하지 못한다.
🏸 IP(Internet Protocol)

- IP 인터넷 프로토콜 역할
- 지정한 IP주소에 데이터를 전달한다
- 패킷(Packet)이라는 통신 단위로 데이터 전달한다.
💡 패킷이란?
- pack + bucket => 우체국에서는 화물을 적당한 덩어리로 나눠 행선지를 표시하는 꼬리표를 붙이는데, 이러한 방식을 데이터 통신에 접목한 것이다.
- 정보를 보낼 때 특정한 형태를 맞추어 보낸다는 것이다. 컴퓨터 간에 데이터를 주고 받을 때 네트워크를 통해서 전송되는 데이터 조각이다.
- IP 패킷 정보
- 출발지 IP와 목적지 IP만 적은채로 보낸다.
- 요청할 때와 응답할 때 서로 다른 곳으로 전달 될 수도 있다.(망이 복잡함)
- IP 주소는 변경 가능하다.
- IP프로토콜의 한계
- 비연결성 : 패킷을 받을 대상이 없어도 패킷 전송
- 비신뢰성 : 패킷 손실되거나 순서대로 안와도 해결X
=> 1500바이트가 넘으면 한번에 많은 데이터를 보내기 부담스러우니까 나눠서 보냄
(1. Hello 2. World => 1.World 2. Hello), 패킷들이 중간에 다른 노드로 이동해서 순서가 변경될 수도 있다.
- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면? (1개의 IP로 노래도 듣고 채팅도 한다면?)
💡 패킷이란?
전송하는 데이터의 최소단위
🎈 링크계층(혹은 네트워크 인터페이스 계층)
네트워크에 접속하는 하드웨어적인 면을 다룬다.
실질적으로 데이터를 전달하며 장치안에서 주고 받은 규칙을 정하는 계층이다.