반응형

OSI 7계층이란?

1. 개요

1.1. 두 대의 Computer가 통신하려면?

: 모든 File과 Program은 0과 1의 나열이므로 0과 1만 주고받을 수 있다.

 

두 대의 Computer를 전선 1대로 연결하면?

  • 1을 보낼 때는 +5V의 전기를 전선을 통해 흘려보낸다.
  • 0을 보낼 때는 -5V의 전기를 전선을 통해 흘려보낸다.

하지만 실제로는 잘 동작하지 않는다.

 

시간 당 전압을 나타내는 함수 (전자기파를 표현하는 함수)

주파수 = 1초당 진동한 횟수 [단위: 헤르츠(Hz)]

☞ 1초에 2번 진동했으므로 2Hz

 

불규칙한 전자기파의 경우 주파수 값이 하나로 고정되지 않는다.

☞ 파동이 진행되는 동안 주파수의 값이 계속 변한다.

전자기파 주파수 최솟값 = 1 Hz, 최댓값 = 10 Hz라고 가정했을 때 전선(전선 뿐 아니라 모든 매질)은 모든 주파수를 통과시킬 수 없다.

e.g., 어떤 전선이 5~8 Hz의 전자기파만 통과시킬 수 있다고 가정하면 위의 전자기파를 흘려보냈을 때 5~8 Hz인 신호만 통과해 엉뚱한 Data가 도착할 것이다.

 

1.2. Digital 신호의 전송

수직선과 수평선이 있는 전자기파는 항상 0 ~ 무한대 Hz의 주파수 범위를 가지며, 이런 전기 신호를 통과시킬 수 있는 전선을 없다.

그렇다면 어떻게 전송해야할까?

Digital 신호를 Analog 신호로 바꿔서 전송해야한다.

반응형

2. Physical Layer

: 물리적으로 연결된 두 대의 Computer가 0과 1의 나열을 주고받을 수 있게 해주는 Module

  • Encoding : 0과 1의 나열(Digital 신호)을 Analog 신호로 바꾸어 전선으로 흘려보내는 것
  • Decoding : 들어온 Analog 신호를 0과 1의 나열(Digital 신호)로 해석하는 것

2.1. Encoding과 Decoding

 

2.2. 사용 예

: Physical Layer는 대부분 HardWare적으로 구성되어있다.

e.g., PHY 칩

 

참고

https://youtu.be/1pfTxp25MA8

 

반응형

'CS기술 지식 > 네트워크' 카테고리의 다른 글

[네트워크] OSI 7계층이란?  (0) 2022.03.20
[네트워크] RESTful이란?  (0) 2022.03.19
[네트워크] TCP vs UDP  (0) 2022.03.09
[네트워크] GET, POST 방식  (0) 2022.03.06
반응형

1. OSI 7 Layer

: 국제 표준기구 ISO가 발표한 Network Model

 

1.1. Physical Layer(물리 계층)

: Bit 신호들을 전기 신호로 변환해 전송하는 Layer

물리 계층 자세한 설명 보러 가기

 

1.2. Data Link Layer(데이터 링크 계층)

: 동일한 Network 내에서의 전송을 담당하는 Layer

☞ Network 계층은 서로 다른 두 Network 간의 전송을 담당한다는 점에서 차이가 있다.

☞ 오류 제어, 흐름 제어를 제공한다.

Data Link Layer의 오류 제어
: 오류 Frame을 버린다.
☞ 오류 Data를 재전송함으로써 오류를 복구하는 Transport Layer의 오류 제어와 차이가 있다.

 

1.3. Network Layer(네트워크 계층)

: IP, 라우터 장비가 속한 계층으로 Data의 전송을 담당하는 Layer

☞ host에 IP 번호를 부여하고 도착지 IP까지의 최적의 경로를 찾는다.(Routing)

 

1.4. Transport Layer(전송 계층)

: 서로 다른 두 네트워크 간의 전송을 담당하는 Layer

☞ Segmentation, 흐름 제어, 오류 제어 등을 제공한다.

Segmentation
더보기

: 상위 계층의 Data를 받아 Segment라는 단위로 나누는 것

Computer A에서 Computer B로 100MB의 비디오를 전송하는 경우
Segment 과정이 없다면 사용자는 100MB의 비디오가 모두 로딩된 후 비디오를 볼 수 있다.
Segment 과정이 있다면 Segment라는 작은 단위로 나뉘어 비디오 일부분을 미리 볼 수 있다.

연결이 중간에 끊기는 경우 Segmentation을 하지 않으면 큰 Data가 날아가 손실률이 크다.

흐름 제어
더보기

: Data 전송량이 서로 다른 기기에서 전송량을 맞추는 것

 

Computer A : 50Mbps 처리

Computer B : 10Mbps 처리

Computer A가 Computer B에게 50Mbps씩 전송한다면 Computer B는 Computer A에게 전송량 낮춰달라고 요구

Computer A가 Computer B에게 5Mbps씩 전송한다면 Computer B는 Computer A에게 전송량 높여달라고 요구

 

전송량 변경을 요구하는 방법으로는 Stop&Wait, Sliding Window 등이 있다.

오류 제어
더보기

: 보낸 Data가 정확히 오류(손실)가 없는지 확인하고 오류가 있다면 해당 Data를 재전송

FEC, BEC, ARQ 등의 방식이 있다.

 

1.5. Session Layer(세션 계층)

: Session을 열고 닫는 기능 및 Session 복구를 지원하는 Mechanism의 Layer

Session 복구
Check Point를 통해 동기화한다.

Computer A에서 Computer B로 100MB의 Data를 전송하는 경우 (Check Point = 5MB)
48MB의 Data를 전송하는 도중에 연결이 끊기면 Check Point 덕분에 45MB부터 Session 재개가 가능하다.

 

1.6. Presentation Layer(표현 계층)

: Data의 변환, 압축, 암호화 등을 수행하는 Layer

더보기

Data의 변환이 왜 필요할까?

서로 다른 통신 기기 간 다른 Encoding을 사용할 수 있기 때문에 Data 변환이 필요하다.

 

1.7. Application Layer(응용 계층)

: 응용 프로세스를 직접 사용해 직접적인 응용 서비스를 수행하는 Layer

☞ HTTP, FTP, SMTP, Telnet 등과 같은 Protocol이 포함되어있다.

 

1.8. 전송 과정

반응형

 

2. TCP/IP Model

: OSI Model의 Presentation Layer, Session Layer가 Application Layer로 통합된 형태실제로 사용하는 Model

☞ OSI Model은 단지 Network를 묘사하기 위한 Model이다.

 

2.1. 전송 과정

 

① Transport Layer에서 TCP/UDP의 정보, Source Port, Destination Port 등의 정보를 Header에 넣어 Data 뒤에 붙이고 캡슐화한다.

 

② Network Layer에서 Source IP, Destination IP 등의 정보를 Header에 넣어 Segment 뒤에 붙이고 캡슐화한다.

 

③ Data Link Layer에서 Sorce MAC Address, 가장 가까운 Router의 MAC Address에 대한 정보를 Header에 넣어 Packet 뒤에 붙이고 캡슐화한다. 이 때 오류 제어를 위한 정보가 담겨있는 Trailer라는 정보도 함게 붙는다.

왜 Destination MAC Address가 아닌 Router의 MAC Address일까?
더보기

A는 처음에 B의 MAC Address를 알 수 없다. DHCP, ARP 등을 통해 Router의 IP를 MAC Address로 변환하고 Router에 대한 Destination MAC Address를 만들어 Header에 넣어준다.

 

④ Physical Layer에서 Frame을 전기 신호로 바꿔 Data를 전송한다.

 

⑤ Computer A에서 Switch로 Data를 전송한다.

☞ Decaptulation을 통해 L2 Header에 대한 정보를 살펴보고 Destination(Router) MAC Address를 확인한다.

 

⑥ Switch에서 Router로 Data를 전송한다.

☞ Decaptulation을 통해 L3 Header에 대한 정보를 살펴보고 Destination(Computer B) IP Address를 확인한다.

 

⑦ Router에서 Routing Table을 통해 Computer B의 MAC Address를 확인한다.

☞ L2 Header의 Destination MAC Address를 Update한다.

 

⑧ Router에서 Switch로 Data를 전송한다.

☞ Decaptulation을 통해 L2 Header에 대한 정보를 살펴보고 Destination(Computer B) MAC Address를 확인한다.

 

⑨ Switch에서 Cam Table을 통해 Computer B로 Data를 전송한다.

 

참고

https://youtu.be/Fl_PSiIwtEo

반응형

'CS기술 지식 > 네트워크' 카테고리의 다른 글

[네트워크] Physical Layer(물리 계층)란?  (0) 2022.03.23
[네트워크] RESTful이란?  (0) 2022.03.19
[네트워크] TCP vs UDP  (0) 2022.03.09
[네트워크] GET, POST 방식  (0) 2022.03.06
반응형

1. REST(REpresentational State Transfer)

: Network Resource(자원)를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 Architecture Style

☞ Client와 Server가 Data를 주고받는 방식에 대해 정리한 원칙이 있고 그 원칙을 기반으로하는 Architecture Style을 REST라고 한다.

☞ HTTP의 장점을 최대한 활용할 수 있는 Architecture로 REST의 원칙은 HTTP를 잘 활용하기 위한 원칙으로 볼 수 있다.

 

REpresentational(표현)  State(상태)  Transfer(전달)

자원(Resource)의 표현을 이용해 상태(정보) 전달

                 HTTP URI                                        HTTP Method

 

2. RESTful

: REST라는 Architecture Style의 제약조건을 모두 만족하는 System은 RESTful하다고 말할 수 있다.

 

3. URI 구조

: Collection과 Document의 조합으로 구성되며 동사를 사용하지 않는다.

  • Collection : Table 전체
    ☞ 일반적으로 객체들의 집합이므로 복수 명사 사용
  • Document : 행 하나 (객체)
    ☞ 집합 중 객체를 구분할 수 있는 값
더보기

/cources/front

/cources/back

/cources/front/crews/jjyoung

 

 

4. HTTP Method

: REST API에서 Resource(자원)에 대한 행위를 표현하기 위해 사용된다.

CRUD(데이터 처리 방법) HTTP Method
Create POST
Read GET
Update PUT / PATCH
Delete DELETE

 

4.1. Read(조회) - GET

<!-- 해당 Collection에 대한 전체 정보 -->
GET /cources
<!-- Document의 정보 조회 -->
GET /cources/front

 

4.2. Create(생성) - POST

<!-- backend coach 집합에 jjyoung라는 닉네임을 가진 코치 개체 생성 -->

POST /courses/back/coaches
<!-- body에 생성할 내용을 담음 -->
body {nickname: jjyoung}

 

4.3. Update(수정) - PUT

<!-- frontend coach 집합 중 첫 번째 코치 닉네임을 jjyoung로 수정 -->

PUT /courses/front/coaches
<!-- 수정할 내용을 body에 담음 -->
body {id: 1, nickname: jjyoung}

 

4.4. Delete(삭제) - DELETE

<!-- frontend crew 집합 중 jjyoung 삭제 -->
DELETE /courses/front/crews/jjyoung

 

5. REST Arichtecture의 제약 조건

5.1. Client - Server

: Client가 Server에게 Request를 보내고 Server가 Client에게 Response를 보내는 구조로 Server와 Client의 역할이 분리되어있다.

  • Server : API 제공과 제공된 API를 이용해 비즈니스 로직을 처리하거나 저장
  • Client : 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 관리

 

5.2. Stateless(무상태성)

: Client와 Server의 통신에는 상태가 없어야하며 모든 요청은 필요한 정보를 담고 있어야 한다.

☞ Client가 두 가지 요청을 보냈을 때 두 번째 요청 시 Server는 Client의 첫 번째 요청의 내용을 모르므로 두 번째 요청시에도 필요한 모든 정보를 담고 있어야 한다.

 

5.3. Cache

: 일반적인 서비스에서 60 ~ 80% 가량의 Transaction이 Select와 같은 조회성 트랜잭션이며 GET은 얼마든지 호출해도 매번 같은 결과를 만들어내므로(Idempotent) 캐싱이 가능하다.

 

5.4. Uniform Interface

 

5.4.1. Identification of Resources
: 자원은 유일하게 식별 가능해야하며 Resource가 하나 이상의 유일한 특정 주소인 URI로 식별되어야 한다.
☞ 아직 POST Method로만 Request를 보내기 때문에 URI나 Request Body로 어떤 동작을 할 지 알려줘야 한다.

 

5.4.2. Manipulation of Resources through Representation
: HTTP Method로 표현(CRUD)을 담아야 한다.
☞ 안전한 Operation과 안전하지 않은 Operation 간의 강한 분리를 제공해야 한다.

HTTP Method Idempotent Safe
GET O O
HEAD O O
PUT O X
POST X X
DELETE O X
PATCH X X
더보기

Idempotent : 같은 요청을 여러 번 하더라도 그 결과가 동일함
Safe : 자원을 변경하지 않음

 

5.4.3. Self-Descriptive Messages
: Message를 스스로를 설명해야한다.

☞ 요청 작업 완료 및 응답 이해가 가능하도록 충분한 정보들을 HTTP Method, Status Code, Header 등을 활용해 전달해야 한다.

더보기

HTTP Status Code

: 발생한 에러의 종류를 Communication하기 위해 상태 코드 사용

Level 200 (Success) Level 400 Level 500
200 : OK 400 : Bad Request 500: Internal Server Error
201 : Created 401 : Unauthorized 501: Not Implemented
203 : Non - Autheoritative 403 : Forbidden 502 : Bad Gateway
204 : No Content 404 : Not Found 503 : Service Unavailable
  409 : Conflict 504 : Gateway Timeout
    599 : Network Timeout

 

5.4.4. Hypermedia As the Engine Of Application State(HATEOAS)

: Hyperlink를 통해 Application의 상태가 전이되어야 한다.

☞ HTTP Response에 다음 Action이나 관계되는 Resource에 대한 HTTP Link를 함께 Return한다.

☞ 장점 : 요청 URI가 변경되더라도 Client는 Server에서 동적으로 생성된 URI를 사용함으로써 Client는 URI 수정에 따른 코드를 변경하지 않아도 된다.

 

5.5. Layered System

: 계층으로 구성이 가능해야 한다.

☞ Server는 다중 계층으로 구성될 수 있으나 Client 입장에서는 계층에 상관 없이 Server만 호출하면 된다.

e.g., 순수 비즈니스 로직을 수행하는 Server, 사용자 인증, 암호화(SSL), 로드 밸런싱 등을 하는 계층을 추가하거나 PROXY, 게이트웨이 같은 중간 매체 사용 가능

 

5.6. Code-On-Demand(Option)

: Server가 Network를 통해 Client에 Program을 전달하면 그 Program이 Client에서 실행될 수 있어야 한다.

e.g., JavaScript를 사용해 Server에서 Program 전달하면 Client에서 동적으로 실행 가능하다.

 

6. Richardson Maturity Model

Glory of REST
Level 3 : Hypermedia Controls
Level 2 : HTTP Verbs
Level 1 : Resources
Level 0 : The Swamp of POX

 

6.1. Level 0 : The Swamp of POX

: POX(Plain Old XML)를 주고받는 단순한 RPC Style System

☞ HTTP를 RPC 기반의 원격 통신을 위한 터널링 Mechanism으로 사용된다.

충족된 제약 조건 : Server-Client, Stateless, Layered System, Manipulation of Resources through Representation

RPC(Remote Procedure Call, 원격 프로시저 호출)
: 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술 (= Client가 Server에 있는 Program을 실행하기 위해 사용하는 통신 기술)
☞ RPC를 이용하면 개발자는 실행 Program이 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.
☞ Client가 Server에게 Message를 보내 Program을 실행시키고 Server에서는 그 Program의 결과를 Client에게 전송

예제

더보기

1. Client - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알아내는 요청

POST /appointmentService HTTP/1.1
[various other headers]

<openSlotRequest date = "2022-03-19", mittingroom = "1"/>

 

2. Server - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알려주는 응답

HTTP/1.1 200 OK
[various other headers]

<openSlotList>
    <slot start = "1600", end = "1700">
        <meetingroom = "1"/>
    </slot>
    
    <slot start = "1900", end = "2100">
        <meetingroom = "1"/>
    </slot>
</openSlotList>

 

3. Client - 19시 ~ 21시 회의실을 예약하는 요청

POST /appointmentService HTTP/1.1
[various other headers]

<appointmentRequest>
    <slot meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
</appointmentRequest>

 

4.1. Server - 예약 성공

HTTP/1.1 200 OK
[various other headers]

<appointment>
    <slot meeingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
</appointment>

 

4.2. Server - 예약 실패

HTTP/1.1 200 OK
[various other headers]

<appointmentRequestFailure>
    <slot meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
    <reason> Slot Not Available </reson>
</appointmentRequestFailure>

 

6.2. Level 1 : Resources

: Resource를 도입해 모든 요청을 단일 서비스 End Point로 보내는 것이 아니라 개별 Resource(meetingroom, slot 등)와 통신한다.

☞ Level 0에서는 모든 요청이 appointmentService라는 단일 서비스 End Point로 보내졌다.

충족된 제약 조건 : Identification of Resources

예제

더보기

1. Client - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알아내는 요청

POST /meetingrooms/1 HTTP/1.1
[various other headers]

<openSlotRequest date = "2022-03-19"/>

 

2. Server - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알려주는 응답

HTTP/1.1 200 OK
[various other headers]

<openSlotList>
    <!-- Slot id를 이용해 resource 만듦 -->
    <slot id = "1234", meetingroom = "1", start = "1600", end = "1700"/>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
</openSlotList>

 

3. Client - 19시 ~ 21시에 회의실 1을 예약하는 요청

POST /slots/5678 HTTP/1.1
[various other headers]

<appointmentRequest>
    <bookingperson = "졍"/>
</appointmentRequest>

 

4. Server - 예약 완료

HTTP/1.1 200 OK
[various other headers]

<appointment>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
</appointment>

 

6.3. Level 2 : HTTP Method

: HTTP Method를 사용할 수 있으며 Level 0, 1에 비해 HTTP의 사용법에 가능한 가깝게 사용한다.

충족된 제약 조건 : Manipulation of Resources through Representation, Self-Descriptive Messages, Cache

예제

더보기

1. Client - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알아내는 요청

 GET /meetingrooms/1/slots?date=20220319&status=open HTTP/1.1
 HOST : https://techcourse.woowahan.com/

 

2. Server - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알려주는 응답

HTTP/1.1 200 OK
[various other headers]

<openSlotList>
    <slot id = "1234", meetingroom = "1", start = "1600", end = "1700"/>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
</openSlotList>

 

3. Client - 19시 ~ 21시에 회의실 1을 예약하는 요청

POST /slots/5678 HTTP/1.1
[various other headers]

<appointmentRequest>
    <bookingperson = "졍"/>
</appointmentRequest>

 

4.1. Server - 예약 완료

HTTP/1.1 201 Created
Location : slots/5678/appointment
[various other headers]

<appointment>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
</appointment>

 

4.2. Server - 예약 실패

HTTP/1.1 409 Conflict
[various other headers]

<openSlotList>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
</openSlotList>

 

6.4. Level 3 : Hypermdedia Controls

: HATEOAS를 도입해 Client가 Server로부터 어떤 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환한다.

☞ Client가 전적으로 Server와 동적인 상호작용이 가능하다.

충족된 제약 조건 : HATEOAS

예제

더보기

1. Client - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알아내는 요청

 GET /meetingrooms/1/slots?date=20220319&status=open HTTP/1.1
 HOST : https://techcourse.woowahan.com/

 

2. Server - 2022년 3월 19일 회의실 1의 예약되지 않은 시간대를 알려주는 응답

HTTP/1.1 200 OK
[various othe headers]

<openSlotList>
    <slot id = "1234", meetingroom = "1", start = "1600", end = "1700">
        <link rel = "linkrels/slot/book", uri = "slots/1234"/>
    </slot>
    
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100">
        <link rel = "linkrels/slot/book", uri = "slots/5678"/>
    </slot>
</openSlotList>

 

3. Client - 19시 ~ 21시에 회의실 1을 예약하는 요청

POST /slots/5678 HTTP/1.1
[various other headers]

<appointmentRequest>
    <bookingperson = "졍"/>
</appointmentRequest>

 

4. Server - 예약 완료

HTTP/1.1 201 Created
Location : https://techcourse.woowahan.com/slots/5678/appointment
[various other heads]

<appointment>
    <slot id = "5678", meetingroom = "1", start = "1900", end = "2100"/>
    <bookingperson = "졍"/>
    <link rel = "/linkrels/appointment/cancel", uri = "/slots/5678/appointment"/>
    <link rel = "self", uri = /slots/5678/appointment"/>
    ...
    <link rel = "/linkrels/help", uri = "/help/appointment"/>
</appointment>

 

7. 결론

  • REST는 Software Architecture의 한 형식이다.
  • REST Architecture는 여러 개의 제약 조건을 가지고 있다.
  • REST Architecture의 제약 조건을 모두 만족하는 System을 RESTful한 System이라고 한다.
  • HTTP Method, Status Code를 용도에 맞게 써야하고, HTTP HeaderLink를 신경쓰면 RESTful한 Service를 설계할 수 있다.

 

참고

https://youtu.be/xY7cpMuWh4w

https://youtu.be/NODVCBmyaXs

반응형

'CS기술 지식 > 네트워크' 카테고리의 다른 글

[네트워크] Physical Layer(물리 계층)란?  (0) 2022.03.23
[네트워크] OSI 7계층이란?  (0) 2022.03.20
[네트워크] TCP vs UDP  (0) 2022.03.09
[네트워크] GET, POST 방식  (0) 2022.03.06
반응형

1. Transport Layer(전송 계층)

: End Point 간 신뢰성있는 Data 전송을 담당하는 계층

 

신뢰성 : Data의 순차적, 안정적인 전달 보장
전송 : 목적지 Port 번호에 해당하는 Process에 Data 전달

 

1.2. Transport Layer의 중요성

만약, 전송 계층이 없다면 ?
  • Data의 순차 전송이 원활히 이루어지지 않음
    e.g., 송신자가 1 2 3의 순서로 Data를 전송했을 때 수신자는 Data 수신 시 2 3 1 등의 순서로 전송받을 수 있다.
  • Flow 문제(흐름 문제) 발생
    Flow 문제의 원인 : 송·수신자 간의 Data 처리 속도의 차이
    e.g., 수신자가 처리할 수 있는 Data의 양을 초과하는 경우 그 이후에 송신되는 Data의 경우 누락될 수 있다.
  • Congestion 문제(혼잡 문제) 발생
    Congestion 문제의 원인 : Network(e.g. Router)의 Data 처리 속도
    e.g., 송신자가 계속 Data를 저송하더라도 Network가 혼잡해 수신자에게 제대로 전달되지 않을 수 있다.

∴ Data의 손실이 발생할 수 있다.

 

2. TCP(Transmission Control Protocol)

: 신뢰성있는 Data 통신을 가능하게 해주는 Protocol

  • Data 전송 전 Connection 연결이 필요하다. (3-Way Handshake : 양방향 통신)
  • Data의 순차 전송을 보장한다.
  • Flow Control (흐름 제어)
  • Congestion Control (혼잡 제어)
  • Error Detection (오류 감지)
    ☞ Checksum 이용

 

2.1. Segment

: TCP의 PDU(Protocol Data Unit, 프로토콜 데이터 단위)

Application 계층에서 Data를 전송하면 TCP Protocol 안에서 내부적으로 Data를 잘라 TCP Header와 Data를 결합한다.

 

 

2.2. TCP Header의 구조

 

  • Source Port : 송신자 Port 번호
  • Destination Port : 수신자 Port 번호
  • Sequence Number, Acknowledgment Number : 순차 전송 담당
  • Flag Field : TCP 연결 제어 및 Data 관리
  • Checksum : Error 검출

 

2.3. 3-Way Handshake (Connection 연결)

   ① Client가 SYN 비트를 1로 설정해 Server에 Packet 송신

   ② Server가 SYN, ACK 비트를 1로 설정해 Client에 Packet 송신

       ☞ ACK 비트로 Data를 받았음을 알림

   ③ Client가 ACK 비트를 1로 설정해 Server에 Packet 송신

   ④ 열결 완료 후 Data 송수신

 

2.4. Data 전송 방식

   ① Client가 Server에 Packet 송신

   ② Server가 ACK 비트를 1로 설정해 Client에게 Packet 송신

   ③ Client가 ACK를 받지 못하면 Packet 재전송

       ☞ 신뢰성 있는 통신 보장

 

2.5. 4-Way Handshake (Connection Close)

   ① Data를 전부 전송한 Client가 FIN 비트를 1로 설정해 Server에 Packet 송신

   ② Server가 ACK 비트를 1로 설정해 Client에 Packet 송신

   ③ Server에서 남은 패킷 송신 (Client는 일정 시간 대기)

   ④ Server가 FIN 비트를 1로 설정해 Client에 Packet 송신

   ⑤ Client가 ACK 비트를 1로 설정해 Server에 Packet 송신

 

 

2.6. 문제점

  • 전송의 신뢰성은 보장하지만 매번 Connection을 연결해 시간 손실이 발생한다. (3-Way Handshake)
  • Packet을 조금만 손실해도 재전송한다.

 

3. UDP(User Datagram Protocol)

: TCP에 비해 신뢰성은 떨어지지만 전송 속도가 일반적으로 빠른 Protocol

  • Connectionless (3-Way HandShake 과정이 없다 : 단방향 통신)
  • 순차 전송, 흐름 제어, 혼잡 제어 기능이 없다.
  • Error Detection
    ☞ Checksum 이용
  • 비교적 Data의 신뢰성이 중요하지 않을 때 사용된다.
    e.g., 영상 스트리밍

 

3.1. User Datagram

: UDP의 PDU(Protocol Data Unit, 프로토콜 데이터 단위)

  • Application 계층에서 Data가 전송되면 Data에 UDP Header를 추가해 만들어진다.
    ☞ Segment는 Data를 쪼갰으나 Datagram은 Data를 쪼개지 않는다.

 

3.2. UDP Header

 

  • Source Port : 송신자 Port 번호
  • Destination Port : 수신자 Port 번호
  • Checksum : Error 검출

 

3.3. UDP의 Data 전송 방식

 

   ① Client가 Packet 송신

 

 

[참고]

https://youtu.be/ikDVGYp5dhg

 

https://diy-multitab.tistory.com/27

 

컴퓨터 네트워크 - Transport Layer

Transport layer application layer 바로 밑에 있는 계층으로 transport layer 관점에서는 logical End-End transport 단위로 그중간에 있는 과정은 관심이 없다. app message를 Header과 Data로 이루어진 Segment..

diy-multitab.tistory.com

 

반응형
반응형

1. HTTP

: Web 상에서 Server와 Client가 Communication할 때 사용하는 Protocol

  • Header : 전송 Method (GET, POST, ...), Client의 Browser, URL 등
  • Body : 비어있거나 정보를 담아 Server에 요청

 

2. GET 방식

: 정보를 Server로 전송할 때 HTTP Packet Header의 URL 뒤에 Data를 기술해 전송하는 방식

 

2.1. 특징

  • 전송 시 HTTP의 Body 부분은 비어있다.
  • URL에 정보가 포함되어 있기 때문에 POST 방식에 비해 보안성이 떨어진다.
  • Data에 길이 제한(Borwser 마다 상이)이 있다.
  • Caching이 가능해 POST 방식에 비해 속도가 빠르다.
  • 게시판 글 등 처럼 정보의 목적으로 링크를 사용할 때 GET 방식이 사용된다.
    e.g., 게시판의 특정 글을 공유할 때 URL에 해당 글의 Index 등의 정보가 포함되어야 공유받은 사람이 링크를 클릭했을 때 해당 글로 바로 접근이 가능
Caching(캐싱)
한 번 접근 후 다시 요청되는 경우 빠르게 접근하기 위해 레지스터에 Data를 저장해두는 것

 

3. POST 방식

: 정보를 Server로 전송할 때 HTTP Packet Body 안에 Data를 기술해 전송하는 방식

 

3.1. 특징

  • Body에 정보가 포함되어 사용자 입장에서는 정보가 감춰지기 때문에 GET 방식에 비해 보안성이 좋다.
    ☞ Chrome 개발자 도구, Fiddler와 같은 Tool로 Data 확인이 가능해 보안성이 좋은 방식은 아니다.
  • Data에 길이 제한이 없다.
  • 요청받는 시간 제한이 있다.
  • 대용량 Data를 전송하거나 비밀번호 등 드러나면 안되는 정보를 전송할 때 POST 방식이 사용된다.

 

4. GET vs POST

  GET 방식 POST 방식
URL 예시 http://localhost:8888/login?id=jjyoung&password=0000 http://localhost:8888/login
Data 기술 장소 HTTP Packet Header HTTP Packet Body
리소스 전달 방식 쿼리스트링 HTTP Body
HTTP 응답 코드 200 201
URL에 Data 노출 여부 O X
Caching 가능 여부 O X
Browser 기록 여부 O X
북마크 추가 여부 O X
Data 길이 제한 여부 O X
멱등성(Idempotent) O X
멱등성(Idempotent)
: 연산을 여러 번 하더라도 결과가 달라지지 않는 성질

GET 방식 : 여러 번 요청해도 응답이 같다.
POST 방식 : 리소스를 새로 생성하거나 업데이트하기 때문에 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

 

[참고]

https://youtu.be/GVSsaTuQcsI

[네트워크] GET, POST 설명과 차이점 (tistory.com)

 

[네트워크] GET, POST 설명과 차이점

Get 방식 - 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달 - 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다. - 길이에 제

superminy.tistory.com

[Network] GET방식과 POST방식의 차이 :: 코딩 공부 일지 (tistory.com)

 

[Network] GET방식과 POST방식의 차이

🚀 클라이언트는 인터넷 브라우저 주소창에 URL을 입력하고 서버는 클라이언트의 요청에 응답을 하여 웹페이지를 보여주게 됩니다. 이때 클라이언트가 서버로 보내는 데이터를 HTTP 패킷이라 하

cocoon1787.tistory.com

 

반응형

'CS기술 지식 > 네트워크' 카테고리의 다른 글

[네트워크] Physical Layer(물리 계층)란?  (0) 2022.03.23
[네트워크] OSI 7계층이란?  (0) 2022.03.20
[네트워크] RESTful이란?  (0) 2022.03.19
[네트워크] TCP vs UDP  (0) 2022.03.09

+ Recent posts