Network

이신아·2024년 7월 15일

Network Seminar
목차
< 목차 >
1. 네트워크 프로그래밍과 IP
2. TCP/IP & UDP
3. OSI 7 Layer & TCP/IP 4 Layer
4. 소켓 통신
1. 네트워크 프로그래밍과 IP
네트워크 프로그래밍
• 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고받을 수 있도록 하는 것
이때 필요한 것은?
• 물리적인 연결.
• But, 인터넷이라는 거대한 네트워크로 연결되어 있어서 물리적인 연결이 필요X
데이터의 송수신 방법은?
• ‘ 소켓(Socket) ’ 이라는 것을 이용하여 데이터를 주고받을 수 있다.
소켓이란?
• 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치를 의미한다.
• 전화기도 소켓이라고 부를 수 있다.
→ 전화기도 전화망(telephone network)을 이용해서 음성 데이터를 주고 받는데 사용되는 도구
(전화기는 거는 것과 받는 것이 동시에 가능하지만,
소켓은 거는 용도의 소켓 / 받는 용도의 소켓에는 차이가 있다)
→ So, 네트워크 프로그래밍 ~ 소켓 프로그래밍 이라고도 부른다.
(소켓에 대한 자세한 설명은 3번에서)


Protocol 이란?
• 데이터를 주고 받기 위한 약속 규약.
IP란?
• Internet Protocol의 약어로, 컴퓨터 네트워크에서, 인터넷을 통해 데이터를 주고받기 위한 프로토콜.
• 인터넷상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값 / 각 기기가 네트워크 상에서 고유한 주소를 가지고 통신할 수 있도록 합니다.
• OSI 7계층 중 Layer3에 위치하는 Protocol
• 전송의 기본 단위 : packet
IP 주소 체계
1. IPv4 (Internet Protocol version 4)
• 4바이트 주소 체계 (2^32)
→ 우리가 흔히 쓰는 주소 체계
ex) 192.168.0.1
2. IPv6 (Internet Protocol version 6)
• 16바이트 주소 체계 (2^128)
→ IPv4 자리 수의 한계로 인해 등장
ex) 2002:db8::8a3f:362:7897
IP 주소 작동 방식
1. 고정(Static) IP 주소
• ISP(인터넷 서비스 공급자)에 의해 해당 사용자 전용으로 부여되는 인터넷 주소
• 컴퓨터에 고정적으로 부여된 공인 IP. 한번 부여되면 IP를 반납하기 전까지는 다른 장비에 부여할 수 없는 IP 주소
ex) 인터넷 사이트, 게임 등에 사용
ex) 구글 : 142.250.76.142 / 네이버 : 223.130.200.104
2. 유동(Dynamic) IP 주소
• 고정적으로 IP를 부여하지 않고 컴퓨터를 사용할 때 남아있는 IP 중에서 돌아가면서 부여하는 IP
• 사용하는 이유 : 더 많은 사용자들에게 인터넷 서비스를 제공하기 위해서.
IP 종류
1. 공인 IP (Public IP)
• ISP(인터넷 서비스 공급자)가 제공하는 IP 주소
• 전세계에서 유일한 IP 주소를 갖는다.
• 공인 IP 주소가 외부에 공개되어 있기에 인터넷에 연결된 다른 PC로부터의 접근이 가능
2. 사설 IP (Private IP)
• 일반 가정이나 회사 등에 할당된 네트워크의 IP주소이며, local IP, Virtual IP라고도 한다.
• IPv4의 주소부족으로 인해 subnetting된 IP이므로, 로컬 네트워크상의 PC나 장치에 할당된다.
• Private IP이므로, 외부에서 접근이 불가능
2.1. 사설 IP 주소대역
→ 전 세계 어디에도 공인 IP가 없는 약속된 사설로만 사용하는 IP 대역
• Class A : 10.0.0.0 ~ 10.255.255.255
• Class B : 172.16.0.0 ~ 172.31.255.255
• Class C : 192.168.0.0 ~ 192.168.255.255

• Class D : 멀티캐스트 IP 주소 식별 시 사용
• Class E : 예약 주소로 사용
멀티캐스트 주소 지정
1. IPv4의 멀티 캐스트 주소
• 총 32비트 중에서 최상위 4비트가 1110의 패턴으로 정의된다.
→ 1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx 구조로써, 최대 2^28개의 멀티캐스트 주소 지정 가능
• CIDR 표기법은 224.0.0.0/24 이다
→ 그룹에는 224.0.0.0 ~ 239.255.255.255의 주소가 포함된다.

네트워크 ID : 무수히 많은 LAN 영역에서 자기 LAN 영역을 구분하기 위한 식별자
→ LAN 영역(Local Area Network) : 같은 네트워크 ID를 공유하는 장치들의 공간
호스트 ID : 해당 LAN 영역에 속한 호스트를 구분하기 위한 식별자
• 192.168.. IP 주소를 썼던 이유는, 사설(Private) IP 중 하나를 사용했던 것
사설 IP 주소만으로는 인터넷에 직접 연결할 수 없다. 라우터를 통해 1개의 공인(Public) IP만 할당하고, 라우터에 연결된 개인 PC는 사설(Private) IP를 각각 할당받아 인터넷에 접속할 수 있게 된다

• 인터넷 서비스 → 가정 : 공인 IP → 사설 IP로 부여 / 인터넷에서 오는 데이터 패킷의 목적지도 해당하는 사설 IP로 변경한 후 개인 PC에 전송
• 가정 → 인터넷 서비스 : 사설 IP → 공인 IP로 부여 / 사설 IP를 할당받은 PC가 데이터 패킷을 인터넷으로 전송하면, 라우터가 해당 사설 IP를 공인 IP로 바꿔서 전송
CIDR(사이더) 표기법
• IP 주소 표기 시, 끝부분에 ‘/24’ , ‘/16’ 같은 숫자를 붙이는 것
• ‘/24’의 의미 : IP 주소의 총 32비트 중에, mask할 비트 수가 24개라는 뜻.
→ 이를 통해 서브넷 마스크를 알 수 있다.
ex) 192.168.0.0/24 라면, 24비트를 mask하니까, 192.168.0.0 ~ 192.168.0.255
ex) 192.168.0.0/16 라면, 16비트를 mask하니까, 192.168.0.1 ~ 192.168.255.255
서브넷 마스크 (Subnet Mask)
• IP 주소와 쌍으로 사용하는 개념
• IP주소는 네트워크 ID와 호스트 ID를 서브넷 마스크로 구분한다
서브넷 마스크 표기법
• 네트워크 ID : 서브넷 마스크와 대응하는 부분 / 서브넷 마스크에서 1인 자리의 IP
• 호스트 ID : 서브넷 마스크와 대응하지 않는 부분 / 서브넷 마스크에서 0인 자리의 IP
ex) IP : 192.168.0.13 | SN : 255.255.0.0
→ 네트워크 ID : 192.168
→ 호스트 ID : 0.13
게이트웨이 (Gateway)
(~ 라우터 와 유사)
• 한 네트워크(segment)에서 다른 네트워크로 이동하기 위해서 거쳐야 하는 지점
• 서로 다른 네트워크의 프로토콜이 다른 경우에 중재 역할을 해준다
ex) 192.168.0.1 대역 에서 192.168.10.2 대역으로 통신을 한다면, 네트워크 대역이 같기 때문에 통신이 가능
192.168.0.1 대역 에서 다른 네트워크(172.16.10.1) 대역으로 통신을 하려면 Gateway를 거쳐야만 통신이 가능
• 게이트웨이, 서브넷 마스크를 통해서 네트워크 아이디를 알 수 있다.
ex) 서브넷 마스크 : 255.255.0.0 | 게이트웨이 130.168.0.1
→ 네트워크 아이디 : 130.168 | 130.168.0.0
라우터 (Router)
• OSI 계층 중 3계층(Network)에 속하는 장비
• 내부 네트워크와 외부 네트워크를 연결해주는 장치
• 데이터들이 전송되는 경로를 설정하는 장치
ex) 공유기
• 기능
1. 경로 설정
→ 데이터 패킷이 목적지까지 갈 수 있는 길을 검사하고 어떤 경로로 전송하는 것이 가장 효율적일지 결정
2. 스위칭
→ 경로가 설정되면 해당 경로로 데이터 패킷을 넘겨주는 것
게이트웨이 (Gateway) 라우터 (Router)
인터넷으로 접속하기 위한 관문
네트워크 주소가 다른 네트워크를 연결할 때 반드시 거쳐가야 하는 것
(기계, 장비가 아니라 인터넷 방향으로 나갈 때 찾아가야할 IP 주소) 네트워크 주소가 다른 경우 서로 통신을 하도록 도와주는 장치
라우터는 장비 (하드웨어)
게이트웨이는 장비가 아닌 개념적 의미 (통로, 출입구)
Routing (라우팅)
• 라우터가 인터넷 공간에서 각기 다른 호스트 사이를 연결해주는 기능
• 어떤 네트워크 안에서 통신 데이터를 보낼 경로를 선택하는 과정
출발지/목적지의 네트워크 ID가 다르면 → 다른 LAN 영역 → 라우팅 필요
출발지/목적지의 네트워크 ID가 같으면 → 같은 LAN 영역 → 스위칭 필요
IP, 서브넷 마스크, 게이트웨이 의 연관성

  • 정해지는 과정
  1. IP 주소 체계, 종류를 정한다 (ex. IPv4, Private IP)
  2. 서브넷 마스크를 정의 (ex. 255.255.192.0) → 그럼 네트워크 ID의 bit수가 정해진다 (18bit)
  3. Gateway를 정한다 (ex. 192.168.64.1)
    → (상위 기준) 3byte 째에서 사용 가능한 bit수 (사용 가능한 영역대) 가 2^6이므로, 4개의 영역으로 나눠진다 → 0 ~ 63 / 64 ~ 127 / 128 ~ 191 / 192 ~ 255
    → 4개의 영역 중 제일 작은 숫자를 Gateway의 3byte째의 수로 지정 (ex. 0 / 64 / 128 / 192)
  4. SN, Gateway에 따라 사용 가능한 IP 대역이 정해진다 (ex. Gateway : 192.168.64.1이라면, 192.168.64.1 ~ 192.168.127.255 사용 가능)
    ( If Gateway : 192.168.128.1 → 사용 가능한 IP 대역 : 192.168.128.1 ~ 192.168.191.255 )
    → 이에 따른 네트워크 ID, broadcast가 정해진다
    (네트워크 ID : 가능한 IP 대역 중 가장 낮은 IP
    broadcastt 가능한 IP 대역 중 가장 높은 IP)
    ex) 130.168.51.111/16
    서브넷 마스크 : 255.255.0.0
    네트워크 ID : 130.168.0.0
    Broadcast 주소 : 130.168.255.255
    게이트웨이 : 130.168.0.1 (디폴트 게이트웨이는 Host ID가 1인 값이다)
    사용 가능 주소 : 130.168.0.1 ~ 130.168.255.254
    (설정 가능한 IP주소는, 사용하지 못하는 네트워크 ID와 서브넷 broadcast 주소 2개를 제외한 나머지가 사용 가능한 IP 주소의 개수이다)
    (이제야 내 자리의 IP, SN, GW의 의미를 이해)
    SN : 255.255.192.0
    GW : 192.168.64.1
    이므로
    IP : 192.168.112.1~255 (여기서 112는 64~127 사이의 값 중 1개를 할당 받은 것)

PORT란?
• 프로그램상에서 생성되는 소켓을 구분하기 위해 사용
ex) 웹을 이용하여 인터넷상에 있는 서버에 접속할 때,
컴퓨터에 있는 웹브라우저 프로그램과 서버에 있는 웹서버 프로그램 사이를 연결해주는 플러그와 같은 역할
• IP : 컴퓨터를 찾을 때 필요한 주소 / Port : 컴퓨터 안에서 프로그램을 찾을 때
Port의 번호
→ 총 0 ~ 65535번으로 이루어져 있다.
• 0 ~ 1023번 : Well-known port, 잘 알려진 포트
• 1024 ~ 49151번 : registered port, 등록된 포트
• 49152~ 65535번 : dynamic port, 동적 포트

  1. TCP/IP & UDP
    TCP/IP를 묶어서 부르는 이유?
    먼저, TCP/IP는 OSI 7 Layer 중에서 Layer 3, 4를 다루는 프로토콜 이다.
    packet 통신 방식의 인터넷 프로토콜인 IP와 / Transport 조절 프로토콜인 TCP(Transmit Control Protocol)로 구성
    IP는 패킷 전달 여부를 보증하지 않고 / TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다 (IP 프로토콜의 문제인 비연결성, 비신뢰성을 커버해준다)
    HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 묶어서 부른다.
    TCP/IP를 사용하겠다는 것은
    IP 주소 체계를 따르고 IP Routing을 이용해 목적지에 도달
    TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고
    신뢰성을 유지할 수 있도록 하겠다는 의미

TCP
• 전송 제어 프로토콜(TCP / Transmission Control Protocol)
• Transport Layer에 속한다
TCP Header의 구조

• Source Port : 보내는 시스템의 애플리케이션 Port
ex) HTTP (80)
• Destination Port : 받는 시스템의 애플리케이션 Port
• Sequence Number : 패킷의 순서를 표시
→ 단위는 바이트로 표시되며 이 패킷이 데이터의 몇번째 바이트 부터인지를 나타낸다
ex) 300byte의 데이터를 100byte씩 나눠서 보낼때 첫 패킷은 0, 두번째는 100, 세번째는 200이다.
• Acknowledgement Number : 패킷을 받고 그에 대답을 할때 사용. 패킷을 잘 수신 받았다는 대답. 이전에 받은 Sequence Number의 다음 번호.
ex) seq : 0인 100byte 데이터를 수신하면 0 ~ 99 byte의 데이터를 받았으므로, 다음으로 필요한 100을 송신한다. ( ACK = seq + data length )
• Header length : 헤더의 길이가 가변이므로, 총 헤더의 길이를 표시 / 단위는 byte
• Reserved : 예약 / 현재는 사용 X / 나중을 위해 남겨둔 공간
• Flags : TCP의 여러가지 속성들을 설정할 수 있는 비트들
• Window : 윈도우의 크기
윈도우란 ? → 한번에 보낼 수 있는 최대 버퍼수
• Checksum : error bit 검출을 위한 값
• Urgent Pointer : 우선순위가 더 높은 데이터의 마지막 바이트 위치를 나타낸다.
Checksum
• 인터넷 프로토콜 (TCP, UDP) 에서 오류를 검출하기 위해 사용
ex) 송신자 → 수신자에게 4비트 숫자 데이터 (7, 11, 12, 0, 6)을 보내려 한다
체크섬 만드는 과정 (송신자)
1. 7+11+12+0+6=36
2. 36(100100)은 4비트로 표현할 수 없으므로, 상위 2비트를 더한다 (0100+10=0110)
3. 0110의 1의 보수를 취한다 (1001=9)
4. 수신자에게 데이터 + 체크섬을 보낸다 (7, 11, 12, 0, 6, 9)
오류 검출 방법 (수신자)
1. 7+11+12+0+6+9=45
2. 45(101101)은 4비트로 표현할 수 없으므로, 상위 2비트를 더한다 (1101+10=1111)
3. 1111의 1의 보수를 취한다(0000=0)
4. 결과 값이 0이므로 오류가 없다고 판단. (0이 아니면 오류)
TCP 특징
1. Reliable Protocol (신뢰할 수 있는 프로토콜)
1.1. 흐름 제어 (Flow Control)
• TCP Header 내의 ‘Window Size’를 사용해 한번에 받고/보낼 수 있는 데이터의 양을 정한다. (수신자 측 더 중요하니, Window size는 수신자가 정한다)
• 지금까지 받은 데이터의 양을 확인하여 송신자에게 보낸다 → Ack Num(Acknowledgment Number)
ex) 수신자가 300번째 데이터를 받았으면 Ack Num에 1을 추가하여 301을 보낸다. (데이터의 순서 번호 : Sequence Number)
1.2. 혼잡 제어 (Congestion Control)
1.3. 오류 제어 (Error Control)
• 데이터의 오류나 누락없이 안전한 전송을 보장
• 오류 판단 기준 : 송신측에서 계산한 체크섬을 수신측에서 검증하여 오류 여부 판단
2. Connection Oriented Protocol (연결 지향 프로토콜)
• 가상의 연결통로를 설정하여 통신하는 방식으로, 가상의 연결통로 = 가상회선
• 순서 제어 (Sequence Control) : 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해준다.
• 스트림 기반의 전송방식 사용. 데이터를 정해진 크기로 전송하는 것이 아니라, 임의의 크기로 나누어 연속해서 전송하는 방식.
3. 3-way handshaking 과정을 통해 연결을 설정 / 4-way handshaking을 통해 해제
4. UDP보다 속도가 느리다
5. Point to Point 방식 / 전이중(Full-Duplex) 방식 사용.
3-way Handshaking (TCP의 접속)
• TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정
• SYN(Synchronization) : 연결요청. 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄
• ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송

포트(Port) 상태 정보
• Closed : 포트가 닫힌 상태
• Listen : 포트가 열린 상태로 연결 요청 대기 중
• SYN_RCV : SYN 요청을 받고 상대방의 응답을 기다리는 중
• Established : 포트 연결 상태
과정
1. Closed
• 아직 연결 시도 전 Client, Server의 상태
• TCP 포트가 닫혀진 상태
1. Listen (Server)
• TCP 포트가 열려 있고 연결 요청 대기하는 상태
1. Client → SYN → Server
• Client가 Server에게 연결을 요청하는 SYN 패킷을 전송
2. Server → SYN + ACK + Client
• Server는 Listen 상태에서 SYN이 들어온 것을 확인하고, SYN_RECV상태로 바뀌어 SYN + ACK 패킷을 Client에게 전송
• SYN 패킷을 받은 Server는 요청을 수락하게 되면 SYN+ACK 패킷을 전송하며 응답
3. Client → ACK → Server
• Server로부터 SYN+ACK 응답을 받아 Client는 서버에게 ACK을 보내고 연결 성립이 된다
Server와 Client가 Established 모드가 된 후 데이터 송수신이 이루어짐
4-way Handshaking (TCP의 접속 해제)
• 세션을 종료하기 위해 수행되는 절차

과정
1. Client → FIN → Server
• Client가 연결을 종료하겠다는 FIN 플래그를 전송
• 보낸 후에 FIN-WAIT-1 상태로 변환
2. Server → ACK → Client
• FIN 플래그를 받은 Server는 확인메세지인 ACK을 Client에게 보낸다.
• 보낸 후, CLOSED-WAIT 상태로 변환
• Client도 마찬가지로 Server에서 종료될 준비가 됬다는 FIN을 받기 위해 FIN-WAIT-2 상태가 된다
3. Server → FIN → Client
• Closed 준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송
4. Client → ACK → Server
• Client는 해지 준비가 되었다는 정상응답인 ACK을 Server에게 보낸다.
• 이때 Client는 TIME-WAIT 상태로 변경
TIME-WAIT 상태는 의도치않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지하기 위해 설정하는 것. / 만약 에러로 인해 종료가 지연되다가 time이 초과되면, CLOSED 상태로 변경된다.
• 데드락이란?
→ 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
• 데드락이 발생하는 상황?
1. 방화벽 설정 문제 : 네트워크의 방화벽 설정이 잘못되어 TCP 연결 설정 또는 해제 중에 필요한 패킷이 차단되거나 제대로 전달되지 않을 수 있다. 이 경우에는 연결이 제대로 해제되지 않아 4-way handshake 과정에서 데드락이 발생할 수 있습니다.
2. 네트워크 지연 : 네트워크에서 발생하는 지연이 4-way handshake 과정에서 문제를 초래할 수 있습니다. 예를 들어, 클라이언트가 FIN 패킷을 보내고 서버가 이를 수신하고 ACK를 보내려고 할 때, 이러한 패킷이 지연되거나 유실될 경우 상대방이 기다리는 동안 데드락 상태에 빠질 수 있습니다
3. 커넥션 스테이트 관리 오류: TCP/IP 스택에서 커넥션 상태를 관리하는 부분에서 오류가 발생할 경우, 연결이 제대로 해제되지 않고 커넥션 상태가 정리되지 않을 수 있습니다. 이 경우에도 데드락이 발생할 수 있습니다
4. 리소스 부족: 서버 또는 클라이언트에서 네트워크 리소스가 부족할 경우, 패킷 처리가 지연되거나 실패할 수 있습니다. 이는 4-way handshake 과정에서 데드락을 유발할 수 있는 원인이 될 수 있습니다.
• TCP의 연결 설정 과정(3-way)과 연결 종료 과정(4-way)이 단계가 차이나는 이유?
→ Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아 있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메세지를 보내기 때문에.
(TCP 특징의 자세한 설명)
Flow Control
1. Stop and wait
• 단순하게 일정량의 패킷만 보내고 처리했다는 응답이 올때까지 다음 packet을 보내지않고 기다리는 방식

  1. Sliding Window
    • 수신측이 감당할 수 있는 윈도우의 크기를 피드백해준다.
    • 송신측에서 이를 기준으로 송신한다.

Error Control
1. GBN (Go-Back-N)
• 패킷을 하나 보낼때마다 윈도우 크기를 감소시킨다
• 윈도우 크기가 0이되면 대기. 그 후, 수신자로부터 ACK을 받을 때마다 윈도우 크기를 하나씩 늘리는 프로토콜
• 누적 ACK (Accumulate ACCK) 방식사용
→ 중간에 패킷이 loss된 경우, 그 뒤에 오는 패킷은 discard시키고 재전송해야 하므로, 비효율적

  1. SR (Selective Repeat)
    • GBN과는 다르게 순서가 다르게 온 패킷은 버퍼에 저장하고,
    • 올바른 순서의 패킷이 오면 버퍼에 저장한 패킷들을 꺼내서 순서를 조합한다

Congestion Control (혼잡 제어)
• 네트워크의 혼잡을 피하기 위해서 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업
1. AIMD (Additive Increase / Multiplicative Decrease)
• 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기를 1씩 증가시켜가며 전송시키는 방법
• 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄인다

  1. Slow Start
    → 중간 경로인 네트워크가 혼잡하면, 제대로 보낼 수 없다.
    → 그래서 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터 송출량을 조금씩 늘린다.
    → 그러면 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있다
    → 이것이 'Slow Start'
  2. Fast Retransmit
    • 중간에 하나가 손실되면, 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다.
    • 중복된 순번의 패킷을 3개 받으면 재전송을 한다.
    • 혼잡한 상황이 일어났다는걸 감지하고, window size를 줄이게 된다.
  3. Fast recovery
    • 혼잡한 상태가 되면 window size를 1로 줄이지 않고, 반으로 줄이고 선형증가시키는 방법
    • 혼잡 상황을 한번 겪고 난 후에는, 순수한 AIMD 방식으로 동작
    TCP 위에서 동작하는 프로토콜
    • HTTP (Hypertext Transfer Protocol)
    → 웹 서버와 웹 브라우저 간에 데이터를 전송하는 프로토콜 / 주로 HTML 문서 등 전송
    • HTTPS (Hypertext Transfer Protocol Secure)
    → HTTP의 보안 버전 / 데이터를 암호화하여 전송 / 주로 웹사이트의 보안 통신에 사용
    • FTP (File Transfer Protocol)
    → 컴퓨터 간에 파일을 전송하기 위한 프로토콜 / 파일 업로드, 다운로드, 관리에 사용
    • SSH (Secure Shell)
    → 보안 쉘을 통해 안전하게 원격 접속 제공 / 주로 원격 서버 관리에 사용
    • SMTP (Simple Mail Transfer Protocol)
    → 전자 메일을 송수신하기 위한 표준 프로토콜
    • RTSP (Real-Time Streaming Protocol)
    → 실시간 데이터 스트리밍을 제어하기 위한 네트워크 제어 프로토콜
    → 세션 관리용 프로토콜 / 세션 관리를 위해서 패킷을 보장 받을 수 있어야 한다.
    → 서버와 클라이언트 간 RTP 데이터의 흐름을 제어한다. 서버에서 클라이언트로부터 play 요청, pause 요청 등의 처리를 한다. (control 요청이 있으므로, 연결이 보장된 TCP를 주로 사용)

UDP
• UDP (User Datagram Protocol)
• 데이터를 데이터그램 단위로 처리하는 프로토콜
UDP Header의 구조

• Source Port Number : 송신 포트번호
• Destination Port Number : 수신 포트번호
• UDP length : UDP 헤더와 데이터를 합친 길이
• UDP checksum :
UDP 특징
• 비연결형 프로토콜 / 할당되는 논리적인 경로 X , 각각의 패킷이 다른 경로로 전송되고 이 각각의 패킷은 독립적인 관계를 지니게 된다.
• 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다
• UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다
• 신뢰성이 낮다
• TCP보다 속도가 빠르다.
UDP 위에서 동작하는 프로토콜
• SNMP (Simple Network Management Protocol)
→ 네트워크 장치들을 관리하고 모니터링하기 위한 프로토콜
• DNS (Domain Name System)
→ 인터넷에서 도메인 이름 → IP 주소로 변환하거나
→ IP 주소 → 도메인 이름으로 변환하기 위한 시스템과 프로토콜
• RTP (Real-Time Transport Protocol)
→ 실제 미디어 데이터 전송을 담당
→ Live Streaming 은 패킷 손실보다 시간이 더 중요하다.


TCP vs UDP
프로토콜 종류 TCP UDP
연결 방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 보장 O 보장 X (전송 순서가 바뀔 수 있음)
수신 여부 확인 O X
통신 방식 1 : 1 방식 1 : 1 / 1 : N / N : N 통신
신뢰성 높다 낮다
속도 느리다 빠르다
3. OSI 7 Layer & TCP/IP 4 Layer
TCP/IP를 묶어서 부르는 이유?
먼저, TCP/IP는 OSI 7 Layer 중에서 Layer 3, 4를 다루는 프로토콜 이다.
packet 통신 방식의 인터넷 프로토콜인 IP와 / Transport 조절 프로토콜인 TCP(Transmit Control Protocol)로 구성
IP는 패킷 전달 여부를 보증하지 않고 / TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다 (IP 프로토콜의 문제인 비연결성, 비신뢰성을 커버해준다)
HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 묶어서 부른다.
TCP/IP를 사용하겠다는 것은
IP 주소 체계를 따르고 IP Routing을 이용해 목적지에 도달
TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고
신뢰성을 유지할 수 있도록 하겠다는 의미


TCP
• 전송 제어 프로토콜(TCP / Transmission Control Protocol)
• Transport Layer에 속한다
TCP Header의 구조

• Source Port : 보내는 시스템의 애플리케이션 Port
ex) HTTP (80)
• Destination Port : 받는 시스템의 애플리케이션 Port
• Sequence Number : 패킷의 순서를 표시
→ 단위는 바이트로 표시되며 이 패킷이 데이터의 몇번째 바이트 부터인지를 나타낸다
ex) 300byte의 데이터를 100byte씩 나눠서 보낼때 첫 패킷은 0, 두번째는 100, 세번째는 200이다.
• Acknowledgement Number : 패킷을 받고 그에 대답을 할때 사용. 패킷을 잘 수신 받았다는 대답. 이전에 받은 Sequence Number의 다음 번호.
ex) seq : 0인 100byte 데이터를 수신하면 0 ~ 99 byte의 데이터를 받았으므로, 다음으로 필요한 100을 송신한다. ( ACK = seq + data length )
• Header length : 헤더의 길이가 가변이므로, 총 헤더의 길이를 표시 / 단위는 byte
• Reserved : 예약 / 현재는 사용 X / 나중을 위해 남겨둔 공간
• Flags : TCP의 여러가지 속성들을 설정할 수 있는 비트들
• Window : 윈도우의 크기
윈도우란 ? → 한번에 보낼 수 있는 최대 버퍼수
• Checksum : error bit 검출을 위한 값
• Urgent Pointer : 우선순위가 더 높은 데이터의 마지막 바이트 위치를 나타낸다.
Checksum
• 인터넷 프로토콜 (TCP, UDP) 에서 오류를 검출하기 위해 사용
ex) 송신자 → 수신자에게 4비트 숫자 데이터 (7, 11, 12, 0, 6)을 보내려 한다
체크섬 만드는 과정 (송신자)
1. 7+11+12+0+6=36
2. 36(100100)은 4비트로 표현할 수 없으므로, 상위 2비트를 더한다 (0100+10=0110)
3. 0110의 1의 보수를 취한다 (1001=9)
4. 수신자에게 데이터 + 체크섬을 보낸다 (7, 11, 12, 0, 6, 9)
오류 검출 방법 (수신자)
1. 7+11+12+0+6+9=45
2. 45(101101)은 4비트로 표현할 수 없으므로, 상위 2비트를 더한다 (1101+10=1111)
3. 1111의 1의 보수를 취한다(0000=0)
4. 결과 값이 0이므로 오류가 없다고 판단. (0이 아니면 오류)
TCP 특징
1. Reliable Protocol (신뢰할 수 있는 프로토콜)
1.1. 흐름 제어 (Flow Control)
• TCP Header 내의 ‘Window Size’를 사용해 한번에 받고/보낼 수 있는 데이터의 양을 정한다. (수신자 측 더 중요하니, Window size는 수신자가 정한다)
• 지금까지 받은 데이터의 양을 확인하여 송신자에게 보낸다 → Ack Num(Acknowledgment Number)
ex) 수신자가 300번째 데이터를 받았으면 Ack Num에 1을 추가하여 301을 보낸다. (데이터의 순서 번호 : Sequence Number)
1.2. 혼잡 제어 (Congestion Control)
1.3. 오류 제어 (Error Control)
• 데이터의 오류나 누락없이 안전한 전송을 보장
• 오류 판단 기준 : 송신측에서 계산한 체크섬을 수신측에서 검증하여 오류 여부 판단
2. Connection Oriented Protocol (연결 지향 프로토콜)
• 가상의 연결통로를 설정하여 통신하는 방식으로, 가상의 연결통로 = 가상회선
• 순서 제어 (Sequence Control) : 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해준다.
• 스트림 기반의 전송방식 사용. 데이터를 정해진 크기로 전송하는 것이 아니라, 임의의 크기로 나누어 연속해서 전송하는 방식.
3. 3-way handshaking 과정을 통해 연결을 설정 / 4-way handshaking을 통해 해제
4. UDP보다 속도가 느리다
5. Point to Point 방식 / 전이중(Full-Duplex) 방식 사용.
3-way Handshaking (TCP의 접속)
• TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정
• SYN(Synchronization) : 연결요청. 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄
• ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송

포트(Port) 상태 정보
• Closed : 포트가 닫힌 상태
• Listen : 포트가 열린 상태로 연결 요청 대기 중
• SYN_RCV : SYN 요청을 받고 상대방의 응답을 기다리는 중
• Established : 포트 연결 상태
과정
1. Closed
• 아직 연결 시도 전 Client, Server의 상태
• TCP 포트가 닫혀진 상태
1. Listen (Server)
• TCP 포트가 열려 있고 연결 요청 대기하는 상태
1. Client → SYN → Server
• Client가 Server에게 연결을 요청하는 SYN 패킷을 전송
2. Server → SYN + ACK + Client
• Server는 Listen 상태에서 SYN이 들어온 것을 확인하고, SYN_RECV상태로 바뀌어 SYN + ACK 패킷을 Client에게 전송
• SYN 패킷을 받은 Server는 요청을 수락하게 되면 SYN+ACK 패킷을 전송하며 응답
3. Client → ACK → Server
• Server로부터 SYN+ACK 응답을 받아 Client는 서버에게 ACK을 보내고 연결 성립이 된다
Server와 Client가 Established 모드가 된 후 데이터 송수신이 이루어짐
4-way Handshaking (TCP의 접속 해제)
• 세션을 종료하기 위해 수행되는 절차

과정
1. Client → FIN → Server
• Client가 연결을 종료하겠다는 FIN 플래그를 전송
• 보낸 후에 FIN-WAIT-1 상태로 변환
2. Server → ACK → Client
• FIN 플래그를 받은 Server는 확인메세지인 ACK을 Client에게 보낸다.
• 보낸 후, CLOSED-WAIT 상태로 변환
• Client도 마찬가지로 Server에서 종료될 준비가 됬다는 FIN을 받기 위해 FIN-WAIT-2 상태가 된다
3. Server → FIN → Client
• Closed 준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송
4. Client → ACK → Server
• Client는 해지 준비가 되었다는 정상응답인 ACK을 Server에게 보낸다.
• 이때 Client는 TIME-WAIT 상태로 변경
TIME-WAIT 상태는 의도치않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지하기 위해 설정하는 것. / 만약 에러로 인해 종료가 지연되다가 time이 초과되면, CLOSED 상태로 변경된다.
• 데드락이란?
→ 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
• 데드락이 발생하는 상황?
1. 방화벽 설정 문제 : 네트워크의 방화벽 설정이 잘못되어 TCP 연결 설정 또는 해제 중에 필요한 패킷이 차단되거나 제대로 전달되지 않을 수 있다. 이 경우에는 연결이 제대로 해제되지 않아 4-way handshake 과정에서 데드락이 발생할 수 있습니다.
• TCP의 연결 설정 과정(3-way)과 연결 종료 과정(4-way)이 단계가 차이나는 이유?
→ Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아 있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메세지를 보내기 때문에.
(TCP 특징의 자세한 설명)
Flow Control
1. Stop and wait
• 단순하게 일정량의 패킷만 보내고 처리했다는 응답이 올때까지 다음 packet을 보내지않고 기다리는 방식

  1. Sliding Window
    • 수신측이 감당할 수 있는 윈도우의 크기를 피드백해준다.
    • 송신측에서 이를 기준으로 송신한다.

Error Control
1. GBN (Go-Back-N)
• 패킷을 하나 보낼때마다 윈도우 크기를 감소시킨다
• 윈도우 크기가 0이되면 대기. 그 후, 수신자로부터 ACK을 받을 때마다 윈도우 크기를 하나씩 늘리는 프로토콜
• 누적 ACK (Accumulate ACCK) 방식사용
→ 중간에 패킷이 loss된 경우, 그 뒤에 오는 패킷은 discard시키고 재전송해야 하므로, 비효율적

  1. SR (Selective Repeat)
    • GBN과는 다르게 순서가 다르게 온 패킷은 버퍼에 저장하고,
    • 올바른 순서의 패킷이 오면 버퍼에 저장한 패킷들을 꺼내서 순서를 조합한다

Congestion Control (혼잡 제어)
• 네트워크의 혼잡을 피하기 위해서 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업
1. AIMD (Additive Increase / Multiplicative Decrease)
• 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기를 1씩 증가시켜가며 전송시키는 방법
• 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄인다

  1. Slow Start
    → 중간 경로인 네트워크가 혼잡하면, 제대로 보낼 수 없다.
    → 그래서 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터 송출량을 조금씩 늘린다.
    → 그러면 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있다
    → 이것이 'Slow Start'
  2. Fast Retransmit
    • 중간에 하나가 손실되면, 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다.
    • 중복된 순번의 패킷을 3개 받으면 재전송을 한다.
    • 혼잡한 상황이 일어났다는걸 감지하고, window size를 줄이게 된다.
  3. Fast recovery
    • 혼잡한 상태가 되면 window size를 1로 줄이지 않고, 반으로 줄이고 선형증가시키는 방법
    • 혼잡 상황을 한번 겪고 난 후에는, 순수한 AIMD 방식으로 동작
    TCP 위에서 동작하는 프로토콜
    • HTTP (Hypertext Transfer Protocol)
    → 웹 서버와 웹 브라우저 간에 데이터를 전송하는 프로토콜 / 주로 HTML 문서 등 전송
    • HTTPS (Hypertext Transfer Protocol Secure)
    → HTTP의 보안 버전 / 데이터를 암호화하여 전송 / 주로 웹사이트의 보안 통신에 사용
    • FTP (File Transfer Protocol)
    → 컴퓨터 간에 파일을 전송하기 위한 프로토콜 / 파일 업로드, 다운로드, 관리에 사용
    • SSH (Secure Shell)
    → 보안 쉘을 통해 안전하게 원격 접속 제공 / 주로 원격 서버 관리에 사용
    • SMTP (Simple Mail Transfer Protocol)
    → 전자 메일을 송수신하기 위한 표준 프로토콜
    • RTSP (Real-Time Streaming Protocol)
    → 실시간 데이터 스트리밍을 제어하기 위한 네트워크 제어 프로토콜
    → 세션 관리용 프로토콜 / 세션 관리를 위해서 패킷을 보장 받을 수 있어야 한다.
    → 서버와 클라이언트 간 RTP 데이터의 흐름을 제어한다. 서버에서 클라이언트로부터 play 요청, pause 요청 등의 처리를 한다. (control 요청이 있으므로, 연결이 보장된 TCP를 주로 사용)

UDP
• UDP (User Datagram Protocol)
• 데이터를 데이터그램 단위로 처리하는 프로토콜
UDP Header의 구조

• Source Port Number : 송신 포트번호
• Destination Port Number : 수신 포트번호
• UDP length : UDP 헤더와 데이터를 합친 길이
• UDP checksum :
UDP 특징
• 비연결형 프로토콜 / 할당되는 논리적인 경로 X , 각각의 패킷이 다른 경로로 전송되고 이 각각의 패킷은 독립적인 관계를 지니게 된다.
• 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다
• UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다
• 신뢰성이 낮다
• TCP보다 속도가 빠르다.
UDP 위에서 동작하는 프로토콜
• SNMP (Simple Network Management Protocol)
→ 네트워크 장치들을 관리하고 모니터링하기 위한 프로토콜
• DNS (Domain Name System)
→ 인터넷에서 도메인 이름 → IP 주소로 변환하거나
→ IP 주소 → 도메인 이름으로 변환하기 위한 시스템과 프로토콜
• RTP (Real-Time Transport Protocol)
→ 실제 미디어 데이터 전송을 담당
→ Live Streaming 은 패킷 손실보다 시간이 더 중요하다.


TCP vs UDP
프로토콜 종류 TCP UDP
연결 방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 보장 O 보장 X (전송 순서가 바뀔 수 있음)
수신 여부 확인 O X
통신 방식 1 : 1 방식 1 : 1 / 1 : N / N : N 통신
신뢰성 높다 낮다
속도 느리다 빠르다
OSI 7 Layer & TCP/IP 4 Layer
OSI 7 Layer TCP/IP 4 Layer TCP/IP Protocol Suite
7 Application 4 Application HTTP / FTP
SMTP / DNS
RIP / SNMP
6 Presentation
5 Session
4 Transport 3 Transport TCP / UDP
3 Network 2 Internet IP, ARP, IGMP, ICMP, RARP
2 Data Link 1 Network Access
(Network Interface)
(Link) Ethernet / Token Ring / PPP
Frame Relay / ATM
1 Physical
OSI 7 Layer
계층 OSI 7 Layer 전송의 기본 단위 주소 기능
7 Application message / data hostname support network apps
6 Presentation message / data Encryption
Translation
5 Session message / data Synchronization
Dialog control
CheckPointing
4 Transport segment port
(ex. 20(http)) Segmentation
Congestion control
Flow Control
Error control
3 Network packet / datagram logical address
(192.168.0.1) Routing
Logical Addressing
2 Data Link frame physical address
MAC address Framing
Error control
Flow control
Access control
Physical Addressing
1 Physical bit Synchronization of bits
OSI 7계층을 나눈 이유?
• 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문에
• 흐름을 한눈에 알아보기 쉽고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있기 때문에
작동 원리
1. 전송 시 : (Encapsulation / 캡슐화) 7계층 → 1계층 으로 각 계층마다 인식할 수 있어야 하는 Protocol Header(계층 정보 → TCP, IP, MAC )를 붙인다
(아래로 내려갈수록 Cable(물리적 연결구간)에 가까워진다)
2. 수신 시 : (Decapsulation) 1계층 → 7계층 으로 헤더를 떼어냄
(위로 올라갈수록 Application(실제 프로그램)에 가까워진다)
3. 2계층에서만 Error control을 위해 꼬리 부분에 추가된다
4. 1계층에서 1, 0의 신호가 되어 전송매체 (동축케이블, 광섬유 등)을 통해 전송
데이터 전달 과정

< My Computer → Your Computer로 데이터 전달 과정 >
(1 ~ 4 Encapsulation)
1. HTTP에 의거하여 규칙에 맞게 웹페이지를 작성하고 관련 정보를 HTTP Header에 담는다
(Data + HTTP Header / Application Layer)
2. 컴퓨터에서 TCP에 의거하여 ‘3-way Handshake’를 통해 신뢰할 수 있는 Session을 생성한 후, 웹페이지 수신마다 확인을 해줄 것을 요청. TCP 관련 정보를 TCP Header에 담는다
(Data + HTTP Header + TCP Header / Transport Layer / TCP Layer)
3. IP 정보를 담은 IP Header를 추가로 설정한 뒤, Source IP와 Destination IP를 지정한다.
(Data + HTTP Header + TCP Header + IP Header / Network Layer)
4. 같은 네트워크 대역에서는 IP Address 가 아닌 MAC Address를 이용하여 통신 및 패킷을 이동시킨다. Ethernet Frame Header를 추가하여 MAC Address, 오류 검출 등의 관련 정보를 담는다. MAC Address는 Source, Destination에 따라 수시로 변경된다
(Data + HTTP Header + TCP Header + IP Header + Ethernet frame Header)
5. 데이터가 전기적 신호(0, 1)로 변하여 UTP Cable 을 타고 Router 1, 2, 3 등을 지나간다 (데이터가 수신자에게 이동)
(Decapsulation)
6. 수신자는 Router 3으로부터 이 데이터를 받은 후, Ethernet Frame Header를 보고 Destination MAC이 자신이 맞는 것을 확인하고
6.1. IP Header를 확인하여, Destination IP가 자신이 맞음을 확인
6.2. TCP Header를 확인하여, 신뢰성 있는 연결이 필요하다는 것을 알게되고 ‘3-way Handshake’를 실시하여 송신자와 패킷을 주고받으며 Session을 생성한다
6.3. HTTP Header를 확인하고 HTTP로 작성되었음을 알고 Data를 확인
6.4. 최종적으로 데이터가 수신자에게 도달.
계층 별 특징
1. 1계층 / Physcial Layer
• 데이터는 0, 1의 비트열, On, Off의 전기적 신호 상태로 이루어져 단지 데이터를 전달
• 단지 데이터 전달의 역할을 함으로, 알고리즘, 오류제어 기능이 없다
• 장비 : Cable, repeater, hub 가 있다
2. 2계층 / Data-Link Layer
3. (Data + HTTP Header + TCP Header + IP Header + Ethernet frame Header)
• 물리적인 연결을 통해 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당
• 안전한 정보의 전달이라는 것은 오류나 재전송하는 기능이 존재
• MAC 주소를 통해서 통신
• 데이터 단위 : Frame
• 장비 : bridge, switch
3. 3계층 / Network Layer
(Data + HTTP Header + TCP Header + IP Header)
• routing기능을 맡고 있다. 목적지까지 가장 안전하고 빠르게 데이터를 보내는 기능을 가지고 있다
• 컴퓨터에게 데이터를 전송할지 주소를 갖고 있어서 통신 가능 (IP주소가 network 계층의 헤더)
• 데이터 단위 : Packet
• 장비 : router, L3 스위치
• OSI 7 계층 관점에서 보면, IP 계층은 Network Layer에 해당
4. 4계층 / Transport Layer
(Data + HTTP Header + TCP Header)
• 신뢰성 있고 정확한 데이터 전송을 담당
• 송신자와 수신자 간의 신뢰성있고 효율적인 데이터를 전송하기 위하여 오류검출 및 복구, 흐름제어, 중복검사 등 수행
• 데이터 전송을 위해 Port 번호를 사용
• 데이터 단위 : Segment
5. 5계층 / Session Layer
• 통신 장치 간 상호작용 및 동기화를 제공
• 연결 세션에서 데이터 교환과 에러 발생 시의 복구를 관리
6. 6계층 / Presentation Layer
• 데이터를 어떻게 표현할지 정하는 역할
• 송신자에서 온 데이터를 해석하기 위한 Application Layer 데이터 부호화, 변화
• 수신자에서 데이터의 압축을 풀 수 있는 방식으로 된 데이터 압축
• 데이터의 암호화와 복호화
7. 7계층 / Application Layer
(Data + HTTP Header)
• 사용자와 가장 밀접한 계층으로 인터페이스 역할
• 응용 프로세스 간의 정보 교환을 담당
• ex) 전자메일, 인터넷, 동영상 플레이어 등
TCP/IP 4 Layer
계층 OSI 7 Layer 전송의 기본 단위 주소 장비
4 Application Data / Message -
3 Transport Segment Port Gateway
2 Internet Packet IP Router
1 Network Access Bit / Frame MAC Bridge, Switch
데이터 전달 과정

  1. 웹 브라우저에서 data를 보내면서 HTTP 헤더가 추가되고 HTTP 메세지가 된다
  2. Transport Layer를 거치면서 HTTP 메세지에 TCP 헤더가 추가되면서 Segment가 된다
  3. Internet Layer를 거치면서 IP 주소 정보가 포함된 IP 헤더가 추가 되면서 Packet이 된다
  4. Packet에 이더넷 헤더와 FCS가 추가되어 Frame이 되고, 그 상태에서 bit로 변환되어 전송된다
  5. (L1) Network Access(Network Interface) Layer
    • 물리적인 데이터의 전송을 담당하는 계층
    • 물리적인 주소로 MAC을 사용하여 프레임 데이터를 전달
    • 노드 간의 신뢰성 있는 데이터 전송을 담당하며, 에러 검출, 패킷의 Frame화를 담당한다
    → 데이터 단위 : Frame
    → 전송 주소 : MAC
    ex) MAC, LAN, Ethernet
  6. (L2) Internet Layer
    → 패킷을 발신지로부터 목적지로 전달하는 역할
    다른 장치를 알아볼 수 있게 해주는 것이 IP
    → 데이터 단위 : packet
    → 전송 주소 : IP
    ex) IP, ARP, ICMP, RARP
    • IP 프로토콜의 문제
    IP로 패킷을 전송 시, (패킷은 출발 IP, 도착 IP, 전송할 데이터 등이 포함)
  7. 패킷의 정보대로 가기 때문에, 그대로 전달. / 도착 IP가 잘못됬거나, 서비스 불능 상태여도 전달을 해버린다 (비 연결성)
  8. 중간에 패킷이 사라지거나(packet loss), 순서대로 오지 않아도 알 수 없다 (비 신뢰성)
  9. 같은 IP를 사용하는 서버에서 데이터를 주고 받는 어플리케이션이 많으면 목적지를 잃는다
  10. (L3) Transport Layer
    → 위와 같은 문제를 해결하기 위해 나온 것이 전송 계층(Transmission Control Protocol - TCP)
    • 통신 노드 간의 연결을 제어하고, 유실된 패킷을 재전송하는 등 신뢰성 있는 통신을 보장
    → 데이터 단위 : Segment
    → 전송 주소 : Port
    ex) TCP, UDP 등
    → TCP (Transmission Control Protocol)
    • 신뢰할 수 있는 프로토콜
    • 3way handshake 과정을 통해 데이터 전달을 보증, 순서를 보증하는 역할
  11. (L4) Application Layer
    • 사용자와 가장 가까운 계층, 사용자-소프트웨어 간 소통을 담당하는 계층
    • client와 server의 요청과 응답을 진행
    • HTTP, FTP, SMTP 등 응용프로그램들이 네트워크를 사용하기 위한 인터페이스를 제공
    → 데이터 단위 : Data / Message
    ex) 파일 전송, 이메일, FTP, HTTP, DNS, SMTP
  12. 소켓 통신
    소켓 통신의 흐름, 과정

Server socket의 구성
= 연결 요청을 수락하는 기능
• 연결 단계 : socket → bind → listen → accept → read/write → close
1. socket → 소켓 생성
2. bind → IP주소와 PORT번호 할당
3. listen → 연결요청 가능상태로 변경 / client의 접근 요청에 수신 대기열을 만들어 몇 개의 client를 대기 시킬지 결정
4. accept → 연결요청에 대한 수락
5. read & write → 연결된 소켓을 통해 read & write
6. close → 소켓 닫기
• Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

void error_handling(char *message);

int main(int argc, char *argv[])
{
int serv_sock;
int clnt_sock;

struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size;

char message[]="Hello World!";

if(argc!=2){
	printf("Usage : %s <port>\n", argv[0]);
	exit(1);
}

// 1. socket 생성
serv_sock=socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
	error_handling("socket() error");

// 2. IP주소와 PORT번호 할당
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(atoi(argv[1]));

// 2. IP주소와 PORT번호 할당
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1 )
	error_handling("bind() error"); 

// 3. 연결요청 가능상태로 변경 (5개의 client까지 대기 가능)
if(listen(serv_sock, 5)==-1)
	error_handling("listen() error");

// 4. 연결요청에 대한 수락
clnt_addr_size=sizeof(clnt_addr);  
clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size);
if(clnt_sock==-1)
	error_handling("accept() error");  

// 5. write
write(clnt_sock, message, sizeof(message));
// 6. close
close(clnt_sock);	
close(serv_sock);
return 0;

}

void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
Client socket의 구성
= 연결 요청을 요구하는 기능
• 연결 단계 : socket → connect → read/write → close
1. socket → 소켓 생성
2. connect → 통신할 서버에 설정된 IP와 PORT번호에 통신을 시도
(통신을 시도 시, 서버가 accept 함수를 이용하여 클라이언트의 socket descriptor 를 반환)
3. read & write → 연결된 소켓을 통해 read & write
4. close → 소켓 닫기
• Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

void error_handling(char *message);

int main(int argc, char* argv[])
{
int sock;
struct sockaddr_in serv_addr;
char message[30];
int str_len;

if(argc!=3){
	printf("Usage : %s <IP> <port>\n", argv[0]);
	exit(1);
}

sock=socket(PF_INET, SOCK_STREAM, 0);
if(sock == -1)
	error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
serv_addr.sin_port=htons(atoi(argv[2]));
	
// 2. 통신할 서버에 설정된 IP와 PORT번호에 통신을 시도
if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) 
	error_handling("connect() error!");

str_len=read(sock, message, sizeof(message)-1);
if(str_len==-1)
	error_handling("read() error!");

printf("Message from server: %s \n", message);  
close(sock);
return 0;

}

void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
소켓 종류
1. TCP
• 양방향으로 바이트 스트림을 전송, 연결 지향성
• Error control, Flow control 보장
• 송신된 순서에 따라 중복되지 않게 데이터를 수신 → 오버헤드가 발생
• 소량의 데이터보다 대량의 데이터 전송에 적합
2. UDP
• 비연결형 소켓
• 데이터의 크기에 제한이 있음
• 확실하게 전달이 보장되지 않는다. 데이터가 손실되어도 오류가 발생하지 않음.
• 실시간 멀티미디어 정보를 처리하기 위해 주로 사용 ex) 전화

0개의 댓글