CS전공지식 노트/3. 네트워크

네트워크 #2 : TCP/IP

berryberries 2023. 8. 12. 00:48

1. TCP(Transmission Control Protocol) / IP(Internet Protocol)

  • 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 프로토콜의 집합
  • TCP는 많은양의 데이터를 가져와 패킷으로 컴파일 후 전송하고 수신받은 패킷을 원래 메세지로 재조립하는 역할을 하는 프로토콜이다
  • IP는 인터넷에서 컴퓨터 위치를 찾아 패킷들이 목적지에 제대로 도착하게 하는 역할하는 프로토콜이다.
  • TCP/IP 4계층 모델을 중심으로 설명한다.
프로토콜
컴퓨터와 네트워크가 서로 통신하기 위해서는 같은 방법으로 통신을 해야한다.
하지만 하드웨어와 운영체제들이 달라서 서로 통신하려면 규칙이 필요한데 이 규칙들이 '프로토콜'이다.

 

1) TCP/IP 4계층 모델 구조

 

  • 제 4계층 : 애플리케이션 계층 ( Application Layer )
    • 웹서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층
    • 프로토콜 : FTP, HTTP,SSH,SMTP,DNS
더보기

1. HTTP (Hypertext Transfer Protocol)
ⓐ 처음에는 서버와 브라우저간에 데이터를 주고 받기 위해 설계된 프로토콜
ⓑ 브라우저 뿐만 아니라 서버와 서버간의 통신할 때도 많이 사용

HTTP 특징
ⓐ 헤더를 통한 확장이 쉽습니다.

   


     헤더에 데이터를 넣어서 HTTP통신을 할 때 쉽게 다른 값을 추가 할 수 있다.

ⓑ HTTP는 stateless합니다.

     동일한 연결인데 이전 통신에 대한 기억이 없기 때문에 두 요청 속 연속적인 상태를 유지할 수 없다.

2. SSH ( Secure SHhell Protocol )
ⓐ 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
ⓑ 데이터 전송, 원격제어할 때 사용된다.

SSH 통신 방법 
ⓐ Private Key and Public Key
비밀번호를 통한 접속이 아니라 key를 사용해 접속하려는 컴퓨터의 인증을 거친다. 
private key :  외부에 노출되어서 안되는 키. 컴퓨터 내부에 저장되어 있다. 보통 암호화된 메세지를 복호화한다.
public key :  공개 되어도 안전한 키. 메세지 전송전 암호화 한다. 암호화된 메세지 복호화 불가.

3. FTP (File Transfer Protocol)
ⓐ 노드와 노드간의 파일을 전송하는데 사용되는 프로토콜
ⓑ 파일을 암호화해서 전송하는 FTPS 또는 SFTP로 대체되고 있다.

4. SMTP (Simple Mail Transfer Protocol)
ⓐ 인터넷을 통해 메일을 보낼 때 사용되는 프로토콜
ⓑ 라이브러리를 추가해 JS기반으로 SMTP를 통해 메일을 보낼 수 있다.

// create reusable transporter object using the default SMTP
transport
let transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: testAccount.user, // generated ethereal user
pass: testAccount.pass, // generated ethereal password
},
});​
  • 제 3 계층 :  전송 계층 ( Trasport Layer )
    • 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
    • 애플리케이션 층과 인터넷 층사이의 데이터가 전달될 때 중계역할을 한다.
    • 프로토콜 : TCP, UDP

더보기

1. TCP ( Transmission Control Protocol)

가상회선패킷교환방식

인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜

연결 지향 방식으로 가상회선패킷교환방식을 사용한다.

     *가상회선 하나에 각 패킷들이 전송된 순서대로 도착하는 방식

ⓒ 헤더의 길이는 20~60바이트로 가변적이다.

재전송과 체크섬 (오류검사)를 한다 

3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.

ⓕ 흐름제어를 통해 높은 신뢰성을 보장한다.

 

 

① 3-way handshaking

  ⓐ 데이터를 전송하기 전에 송신하는쪽괴 수신하는 쪽이 연결되는 과정

  ⓑ 접속을 요청하는 SYN플래그와 클라이언트의 접근을 수락하는  ACK플래그 를 사용한다. 

1. SYN 단계: 클라이언트는 서버와 연결하기 위해 클라이언트의 ISN을 담아 SYN을 보낸다.
2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다.
3. ACK 단계: 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.       

 4-way handshaking

    ⓐ HTTP요청과 응답과정이 끝났을 때 연결을 종료하는 과정

    ⓑ ACK플래그와 클라이언트가 서버로 연결 종료하겠다는 FIN플래그가 사용된다.

1.  연결 종료 시, 클라이언트가 서버로  FIN세그먼트를 보내고 FIN_WAIT_1 상태로 서버의 응답을 기다림.
2.  서버는 클라이언트로 ACK을 보내고 CLOSE_WAIT 상태
       -> 클라이언트는 세그먼트를 받으면 FIN_WAIT_2 상태.
3. 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN 세그먼트를 보냄
4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내면 CLOSED 상태가 된다.
       -> 클라이언트는 TIME_WAIT 이후 연결이 닫힘. 

Time_Wait

    ⓐ 지연 패킷 등이 발생했을 때 데이터 무결성을 해결하기 위해 패킷을 기다리는 시간

    ⓑ FIN을 받은 클라이언트가 바로 연결된 소켓을 닫아버리면 FIN을 보내기 전에 보낸 패킷은 못받게된다.

        그래서 클라이언트는 서버로부터 FIN을 받아도 일정 시간동안 대기해야한다.

 

2. UDT ( User Datagram Protocol ) 

 데이터를 데이터그램 단위로 처리하는 프로토콜

비연결형 방식으로 데이터그램 패킷 교환방식을 사용한다.

    *패킷이 독립적으로 이동하여 최적의 경로를 선택해 서로 다른 경로로 전송되는 방식

ⓒ 헤더의 길이는 8바이트로 고정된다.

오류검사는 체크섬만 지원된다.

ⓔ TCP보다 속도가 빠르다.

ⓕ 흐름제어가 없어 신뢰성이 보장되지 않는다.

  • 제 2 계층 : 인터넷 계층 ( Internet Layer )
    • 전송받은 네트워크 패킷을 지정된 IP주소로 전송하기 위해 사용되는 층
    • 프로토콜 : IP, ARP, ICMP
  • 제 1 계층 : 링크계층 ( Network Access Layer ) 
    • MAC주소를 사용해서 데이터를 알맞은 주소로 전송을 하는 층
    • 프로토콜 : Ethernet

2) OSI 7계층과 TCP/IP 4계층 간단 비교

 

  • TCP/IP 4계층은 OSI 7 계층모델로 설명되기도 한다.
  • TCP/IP 4계층은, TCP/IP 프로토콜 통신 과정에 초점을 맞추어, OSI 7계층을 좀 더 단순화 시킨 계층을 의미한다.
  • OSI 7계층은 TCP/IP 4계층과 달리 애플리케이이션층을 3개층으로 나누고 링크 계층을 데이터링크.물리계층으로 나눠 설명한다.

계층 구조의 장점

  • 각 계층별 처리 역할이 다르기 때문에, 계층별 간섭을 최소화할 수 있다.
  • 각 계층은 서로 독립되어 있기 때문에 특정계층에 문제가 생겨도 다른 층에는 영향이 없다. -> 유지보수가 편하다.
  • 다른 계층끼리는 데이터의 전달 과정을 구체적으로 알 필요가 없기 때문에, 데이터의 캡슐화와 은닉이 가능하다.

 

3) TCP/IP 4계층의 캡슐화, 비캡슐화

데이터 흐름도와  계층별 헤더에 추가되는 정보들

  • 캡슐화
    • 수신자에게 데이터를 보낼 때 데이터가 각 계층을 지나며 각 계층의 특징들이 담긴 헤더들이 붙여지는 과정
    • 상위 계층에서 하위계층으로 데이터가 이동하면서 계층마다 필요한 정보를 헤더에 저장한다.
  • 비캡슐화
    • 캡슐화 되었던 정보들을 역순으로 제거하면서 애플리케이션 계층까지 도달하는 과정
    • 캡슐화의 역과정
    • 데이터가 하위계층에서 상위계층으로 이동할 때 계층마다 추가됐던 헤더를 읽고 처리한 후 제거한다.

4) PDU(protocol data unit)

  • TCP/IP 4계층을 기반으로 설명했을 때 각 계층의 데이터 단위
  • 세그먼트 : 적절한 크기로 쪼개진 조각  
  • 패킷 : 세그먼트에 SP(시작 포트)와 DP(목적지 포트)가 포함된 IP 헤더가 붙은 형태의 조각
  • 프레임 : MAC주소 헤더와 CRC/체크섬 트레일러가 붙은 조각
※ 데이터 무결성 검사 
- 순환중복검사 ( CRC )

  ● 데이터에 오류가 발생했는지 확인하는 코드를 데이터 뒤에 확장 데이터를 덧붙여 보내는 방식
  ● 송신측에서는 CRC값을 데이터에 붙인 코드워드를 전송하며, 수신측에서는 수신된 코드워드에서 CRC값을 이       용하여 에러 발견

- 체크섬 
● 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
● 나열된 데이터를 더하여 체크섬 숫자를 얻고, 정해진 비트수의 모듈라로 정해진 비트수로 재구성

5) MTU, MSS, PMTUD

①  MTU ( Maximum Transmission Unit )

  • 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷의 크기
  • MTU를 기준해서 데이터는 패킷화 된다.
  • MTU보다 큰 데이터 패킷은 작은조각으로 잘라져 분할될 수 있다. 분할된 패킷은 목적지에 도달하면 다시 조립된다.
  • MTU는 바이트 단위며 최대 크기는 1500바이트이다.
더보기

분할 예시 ) 

① 컴퓨터 A와 서버 A가 서로 통신을 할 때 라우터 B와 라우터 C 를 거쳐야 한다.

② 라우터 C의 MTU는 1400 / 컴퓨터 A,서버 A, 라우터 B의 MTU는 1500인데 MTU의 차이를 모르고 패킷을 보낸다.

 라우터B의 MTU가 라우터 C의 MTU보다 크기 때문에 패킷이 분할된다.

 

BUT, 패킷 분할은 대기시간이 생기기 때문에 비효율적이다. 따라서 최대한 분할은 피해야 한다

  • 분할이 안되는 이유
    • IPv6 : 분할을 허용하지 않는다.
    • IPv4 : IPv4 헤더에는 flags라는 필드에서  "Don't Fragment" 플래그가 활성화되면 분할은 불가능하다.

 

② MSS ( Maximum Segment Size )

  • TCP 상에서 전송할 수 있는 사용자 데이터의 최대 크기
  • MSS 값은 기본적으로 설정된 MTU 값에 의해 결정된다.
    • 일반적으로 MTU는 1500바이트이며 MSS는 1460바이트이다.
    • Ethernet 일 경우 MTU 1500에 IP Header 크기 20 Byte, TCP Header 크기 20 Byte를 제외한 1460이 MSS 값이다.

 

③ PMTUD ( Path MTU Discovery )

  • 송수신자 간의 경로 상에서 패킷이 누락된 경우, 패킷의 크기를 낮추면서 MTU에 맞게끔 반복해서 보내는 과정
  • 한마디로 MTU의 크기에 맞계 계속 줄이는 것을 말한다.

 

 

참고 자료